2010-08-03 17 views
7

quiero crear una pequeña aplicación que muestre una notificación de bandeja (o una ventana emergente o algo así) cada vez que una actualización o inserción entre cierta tabla en una base de datos del servidor SQL.notificación de bandeja en la actualización de la base de datos

¿Cuál es la forma más sencilla de hacerlo ya que quiero evitar el sondeo si es posible?

+0

buenas respuestas a continuación, aunque yo diría que el sondeo es en realidad la forma más sencilla. Tiene sus desventajas, a veces desventajas bastante graves, pero la complejidad no es una de ellas. –

Respuesta

7

Query Notifications. Esta es la función del Servidor SQL que permite que una aplicación se suscriba a las notificaciones enviadas desde el servidor cuando se modifican los datos. Por lo general, se aprovecha a través de la clase SqlDependency.

me han publicado recientemente la LinqToCache project que le permite añadir notificaciones basadas SqlDependency y la invalidación de caché para las consultas LINQ:

var query = (from r in ctx.table select r).AsCached(
"table", new CachedQueryOptions() { 
    OnInvalidated = (sender, args) { 
     // the query was invalidated, data has changed 
     // refresh display or notify user 
    } 
}); 
2

Los procedimientos almacenados extendidos son lo primero que pensé primero, y probablemente sean la solución que utilizaría si quisiera ejecutar la aplicación de supervisión en el servidor SQL mismo. Pero supongo que probablemente no sea el caso.

Sugiero usar MSMQ como una capa intermedia, ya que viene con casi todas las versiones de Windows actualmente y está más o menos hecha a medida para este tipo de cosas. Por lo tanto, ir a través de las capas, aquí, usted tiene:

  1. UPDATE y INSERT desencadena en su mesa determinada, que llaman ...
  2. ... un ensamblado de .NET (añadido mediante la integración CLR), que ...
  3. ... pone un mensaje que describe la inserción/actualización en una cola de MSMQ en el servidor, que ...
  4. ... es recibida por la aplicación de la bandeja, donde se está ejecutando ...
  5. ... y luego se muestra.

Hay código de ejemplo para acceder a MSMQ de SQL Server aquí: http://www.codeproject.com/KB/database/SqlMSMQ.aspx

+0

+1, pero el artículo indica que la mejor manera de hacerlo es utilizando CRL, y que está disponible solo desde SQL Server 2005 – Unreason

+0

Comentario justo, debería haber mencionado eso. Para ampliar eso, * usted * también puede usar esta técnica usando un procedimiento almacenado extendido para llamar a MSMQ para poner en cola su notificación de inserción/actualización, y así obtener los beneficios si su aplicación de monitoreo se ejecuta en una máquina remota . Pero, francamente, si tiene SQL 2005 o posterior y puede hacerlo de la manera CLR, le sugiero encarecidamente que lo haga de esa manera. Es mucho más fácil de implementar. :) Gracias! – Cerebrate

Cuestiones relacionadas