【发布时间】:2013-01-25 13:32:49
【问题描述】:
我有一个非常令人沮丧的问题。我的 .net 4 应用程序已成功使用 SqlDependency 对象一段时间来接收来自 SQL 服务器的 INSERT 或 UPDATE 通知。
但是,它接收通知的数据库刚刚更新(它是第 3 方应用程序的后端,所以我不知道更新需要什么),现在当我重新启动我的 SqlDependency 应用程序时,它不会运行适当地。在StartSQLDependency() 方法期间,此行触发dependency_OnChange 事件:
using (SqlDataAdapter adapter = new SqlDataAdapter(_SqlCommand))
adapter.Fill(_datatable);
SqlNotificationEventArgs:
e.Info "Query"
e.Source "Statement"
e.Type "Subscribe"
以前我只见过:
e.Info "Update" or "Insert"
e.Source "Data"
e.Type "Change"
谁能建议我在数据库中所做的更改导致此问题?
【问题讨论】:
-
你订阅了哪些命令?
-
您在代码中的何处声明您的 SqlDependency?例如,如果我想订阅数据库中的某个表,我会使用我想要监控的任何 SQL 命令来实例化一个 SqlDependency 对象。 SqlDependency 依赖 = new SqlDependency(command);依赖.OnChange += new OnChangeEventHandler(this, OnChange);那么“命令”参数可能类似于: SELECT [Column name] FROM [dbo].[table] 因此,每当我的表中的列发生更改时,它都会触发 OnChange 事件
-
_command.Notification = null; SqlDependency 依赖 = new SqlDependency(_command); dependency.OnChange += dependency_OnChange;
-
什么是“_command”命令字符串?
-
是的,我知道,但是您的 SqlDependency 应该只针对您告诉它触发的命令触发,所以我试图查看代码。同时,在您的 OnChange 方法中,我将对 e.Info 运行条件检查,并且仅在属性为“更新”或“插入”时才执行某些操作,如果这是您想要的。一些伪代码: if(e.Info == SqlNotificationInfo.Update || e.Info == SqlNotificationInfo.Insert) { // do stuff}
标签: c# .net sqldependency