【问题标题】:SqlDependency dependency_OnChange Info "Query"SqlDependency 依赖_OnChange 信息“查询”
【发布时间】: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


【解决方案1】:

我知道这是旧的,但对于后代......

在尝试研究 SqlDependency 触发器时,我遇到了一个 CodeProject,它说带有这些参数的事件表明用于通知的查询不正确(大约在文章的一半)。

微软有an article关于支持的通知语句(用于 SQL Server 2008)以及如何正确构建它们以避免此错误事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多