SqlDependency数据库监控类的使用方法
Posted zhangredli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlDependency数据库监控类的使用方法相关的知识,希望对你有一定的参考价值。
1、使用下面语句启用数据库的 Service Broker
ALTER DATABASE [YOUR DBNAME] SET NEW_BROKER WITH ROLLBACK IMMEDIATE; ALTER DATABASE [YOUR DBNAME] SET ENABLE_BROKER;
2、使用SqlDependency.Start(connString)静态方法启用监听
public string connString; private string SqlMonitorCmd; public SQLHelper(bool SqlMonitorEnable, string sqlMonitorCmd, string ConnString) { connString = ConnString; SqlMonitorCmd = sqlMonitorCmd; if (SqlMonitorEnable && !string.IsNullOrEmpty(SqlMonitorCmd) && !string.IsNullOrEmpty(connString)) { SqlDependency.Start(connString); SqlMonitor(); } }
3、创建监听方法,绑定sqlCommand
private void SqlMonitor() { using (SqlConnection connection = new SqlConnection(connString)) { connection.Open(); //依赖是基于某一张表的,而且查询语句只能是简单查询语句,不能带top或*,同时必须指定所有者,即类似[dbo].[] using (SqlCommand command = new SqlCommand(SqlMonitorCmd, connection)) { command.CommandType = CommandType.Text; SqlDependency sqlDependency = new SqlDependency(command); sqlDependency.OnChange += new OnChangeEventHandler(dependency_OnChange); command.ExecuteReader(); } } }
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change) //只有数据发生变化时,才重新获取并数据
{
SqlChanged?.Invoke();
SqlMonitor();//由于OnChange只能触发一次,所以要重新绑定
}
}
注:
连接数据库尽量使用sql用户名sa连接,不要用win身份登录,如果OnChange始终不能触发,可能是用户权限不够使用这个语句赋予权限
ALTER AUTHORIZATION ON DATABASE::[YOUR DBNAME] TO sa;
以上是关于SqlDependency数据库监控类的使用方法的主要内容,如果未能解决你的问题,请参考以下文章
SqlDependency/Query 通知 - SQL Server 重新启动
使用SqlDependency与表的定期轮询(对性能的影响)