sqlDependency监控数据库数据变化,自动通知

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace Sample2
{
    class Program
    {
        private static string _connStr;

        static void Main(string[] args)
        {
            _connStr = "Data Source=localhost;User Id=sa;Password=xxx;Database=xxx;Pooling=true;Max Pool Size=600;Min Pool Size=0;";
            SqlDependency.Start(_connStr);//传入连接字符串,启动基于数据库的监听
            UpdateGrid();
            Console.Read();
        }

        private static void UpdateGrid()
        {
            using (SqlConnection connection = new SqlConnection(_connStr))
            {
                connection.Open();
                //依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[]
                using (SqlCommand command = new SqlCommand("select D_Id,D_Name,D_Password,D_Else,D_Amount From [dbo].[TestTable]", connection))
                {
                    
                    command.CommandType = CommandType.Text;
                    SqlDependency dependency = new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                    using (SqlDataReader sdr = command.ExecuteReader())
                    {
                        Console.WriteLine();
                        while (sdr.Read())
                        {
                            Console.WriteLine("{0}---{1}---{2}---{3}---{4}", sdr["D_Id"].ToString(),
                                sdr["D_Name"].ToString(), sdr["D_Password"].ToString(), sdr["D_Else"].ToString(), sdr["D_Amount"].ToString());
                        }
                        sdr.Close();
                    }
                }
            }
        }

        private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            UpdateGrid();
        }
    }
}
use master
ALTER DATABASE WINE_CLOUD set ENABLE_BROKER

/*
想启用Broker时,出现以下错误:
无法启用数据库 "db2" 中的 Service Broker,因为已存在启用的具有相同 ID 的 Service Broker。
解决办法:
use master
alter database db2 set NEW_BROKER

然后再运行
use master
ALTER DATABASE db2 set ENABLE_BROKER
*/
--验证是否能启用
go
Select DATABASEPROPERTYEX('WINE_CLOUD','IsBrokerEnabled')

--修改数据库使用者(至关重要)
exec sp_changedbowner @loginame = 'sa'

原文地址:https://www.cnblogs.com/smartsmile/p/6234040.html