C#使用sqldependency监听SqlServer表数据的变化
sql server设置:ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;语句让相应的数据库启用监听服务
当ALTER DATABASE Databasename SET ENABLE_BROKER; 执行过程中始终不能结束的时候。
ALTER DATABASE DatabaseName SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE Databasename SET ENABLE_BROKER;
这样可以执行完毕,以便支持SqlDependency特性。
先配置app.config
<connectionStrings >
<add name="SQLConnString" connectionString="Data Source=.;Initial Catalog=***;User ID=***;Password=***" providerName="System.Data.SqlClient"/>
</connectionStrings>
控制台程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
static void Main(string[] args)
{
_connStr = ConfigurationManager.ConnectionStrings["SQLConnString"].ToString();
SqlDependency.Start(_connStr);
UpdateGrid();
Console.ReadKey();
}
private static void UpdateGrid() {
using (SqlConnection con = new SqlConnection(_connStr)) {
using (SqlCommand cmd = new SqlCommand("select ID,UserID,[Message] From [dbo].[Messages]", con)) {
cmd.CommandType = CommandType.Text;
con.Open();
SqlDependency sqldep = new SqlDependency(cmd);
sqldep.OnChange += new OnChangeEventHandler(SqlDep_OnChange);
SqlDataReader sdr = cmd.ExecuteReader();
Console.WriteLine();
while (sdr.Read()) {
Console.WriteLine("Id:{0}\tUserId:{1}\tMessage:{2}", sdr["ID"].ToString(), sdr["UserId"].ToString(),
sdr["Message"].ToString());
}
sdr.Close();
}
namespace Messge
{
class Program
{
private static string _connStr;
static void Main(string[] args)
{
_connStr = ConfigurationManager.ConnectionStrings["SQLConnString"].ToString();
SqlDependency.Start(_connStr);
UpdateGrid();
Console.ReadKey();
}
private static void UpdateGrid() {
using (SqlConnection con = new SqlConnection(_connStr)) {
using (SqlCommand cmd = new SqlCommand("select ID,UserID,[Message] From [dbo].[Messages]", con)) {
cmd.CommandType = CommandType.Text;
con.Open();
SqlDependency sqldep = new SqlDependency(cmd);
sqldep.OnChange += new OnChangeEventHandler(SqlDep_OnChange);
SqlDataReader sdr = cmd.ExecuteReader();
Console.WriteLine();
while (sdr.Read()) {
Console.WriteLine("Id:{0}\tUserId:{1}\tMessage:{2}", sdr["ID"].ToString(), sdr["UserId"].ToString(),
sdr["Message"].ToString());
}
sdr.Close();
}
}
}
private static void SqlDep_OnChange(object sender,SqlNotificationEventArgs e) {
UpdateGrid();
}
}
}
效果:
数据库变化前:
数据库变化后:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具