C # -SqlDependency supervisa los cambios en las tablas de la base de datos

 SqlDependency proporciona dicha capacidad: cuando los datos en la base de datos monitoreada cambian, SqlDependency activará automáticamente el evento OnChange para notificar a la aplicación, de modo que el sistema pueda actualizar automáticamente los datos (o caché).

 

/ * 
 * Nota: 

1. Modifique la configuración de la base de datos 
altere el conjunto de bases de datos enable_broker con reversión inmediata; 2. 

[*] no se puede utilizar en la sintaxis de consulta de SQL 
[incorrecto:] seleccione * De [dbo]. [Alarm_table] 

[correcto De] seleccione sn, address, create_time From [dbo]. [Alarm_table] 
 * / 

using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Data.SqlClient;
 using System.Drawing;
 usando System.Linq;
 usando System.Text;
 usando System.Threading.Tasks;
 usando System.Windows.Forms; 

espacio de nombresSqlDependency_Test 
{ 
    pública  parcial  de clase MainForm: Formulario 
    { 
        / * 确认DB有执行[alter database <nombrebd> conjunto ENABLE_BROKER con reversión inmediata;] * / 
        conexión SqlConnection = nuevo SqlConnection ();
        privada  estática  cadena ConnectionString; 

        public MainForm () // 构造
        { 
            InitializeComponent (); 
        } 

        / * 启动 SQL 监控* / 
        private  void btn_Start_Click ( remitente de objeto , EventArgs e) 
        { 
            try
            { 
                ConnectionString = " Data Source = " + txt_dbSource.Text + " ; Catálogo inicial = " + txt_dbDatabase.Text + " ; ID de usuario = " + txt_dbUser.Text + " ; Password = " + txt_dbPassword.Text; 
                SqlDependency.Start (ConnectionString ); // Llame al método SqlDependency.Start (String strConnectionString) para habilitar el escucha de dependencia en el lado de la aplicación. 
                SqlDependencyWatch (); 
                RefreshTable (); 
            } 
            catch (Exception ex)  
            {
                MessageBox.Show (ex.ToString ()); 
            } 
        } 

        / * Cerrar supervisión SQL * / 
        private  void btn_Stop_Click ( remitente de objeto , EventArgs e) 
        { 
            SqlDependency.Stop (ConnectionString); 
        } 

        / * Cerrar supervisión SQL * / 
        private  void MainForm_FormClosed ( remitente de objetos , FormClosedEventArgs e) 
        { 
            SqlDependency.Stop (ConnectionString); 
        } 

        / * Crear supervisión SQL * / 
        private  void SqlDependencyWatch () 
        { 
            stringsSQL = " SELECCIONAR [ID], [Nombre], [Sexo], [Nacimiento], [Contraseña], [Insert_Time] FROM [dbo]. [T_User] " ; 

            using (SqlConnection connection = new SqlConnection (ConnectionString)) 
            { 
                using (SqlCommand command = new SqlCommand (sSQL, connection)) 
                { 
                    command.CommandType = CommandType.Text; 
                    conexión abierta (); 
                    Dependencia de SqlDependency = nueva dependencia de SqlDependency (comando); 
                    dependencia.OnChange + = nuevo OnChangeEventHandler (SQLTableOnChange); 
                    SqlDataReader SDR = Command.ExecuteReader (); 
                } 
            } 
        } 

        / * mesa de modificar el procesamiento de eventos de disparador * / 
        void SQLTableOnChange ( Objeto remitente, SqlNotificationEventArgs E) 
        { 
            SqlDependencyWatch (); 
            la RefreshTable (); 
        } 

        / * re Actualizar datos de visualización DataGridView * / 
        private  void RefreshTable () 
        { 
            string sSQL = " SELECT TOP 100 [ID], [Name], [Sex], [Birth], [Password], [Insert_Time] FROM [dbo]. [T_User]" 
                    } ;

            DataTable datatable = new DataTable ();
            using (conexión SqlConnection = nueva conexión SqlConnection (ConnectionString)) 
            { 
                connection.Open (); 
                using (SqlCommand cmd = new SqlCommand (sSQL, connection)) 
                { 
                    using (SqlDataAdapter dr = new SqlDataAdapter (sSQL, connection)) 
                    { 
                        dr.Fill (tabla de datos); 
                        this .Invoke ((EventHandler) ( delegado {dgv_Show.DataSource = datatable;})); 
                } 
            } 
        } 
    } 
}

 

 

Después de agregar el código anterior y ejecutar, " SQL Server Service Broker de la base de datos actual no está habilitado, por lo que no se admite la notificación de consulta. Si desea utilizar la notificación, habilite Service Broker para esta base de datos ":

 

 Compruebe si el servicio de supervisión de la base de datos está habilitado:

SELECT is_broker_enabled FROM sys.databases WHERE name = 'DB_MyDB';

 

Resultado de la consulta: is_broker_enabled de El resultado es 0, lo que significa que la base de datos no inicia Service Broker

La función SqlDependency solo es compatible si la base de datos está habilitada para servicios de escucha .

 

Solución: Nota: Las dos oraciones se ejecutan al mismo tiempo, y la ejecución por separado muestra que la transacción ilegal se revierte. Retroceso estimado completado: 100%.

USE DB_MyDB   
GO 
ALTER DATABASE DB_MyDB SET NEW_BROKER CON ROLLBACK INMEDIATE; 

ALTER DATABASE DB_MyDB SET ENABLE_BROKER;

 

  Vuelva a consultar el estado is_broker_enabled, el estado es 1, la base de datos no inició Service Broker correctamente.

 

 

Referencia: https://www.haolizi.net/example/view_16216.html

Supongo que te gusta

Origin www.cnblogs.com/mexihq/p/12697797.html
Recomendado
Clasificación