【问题标题】:SQLDependency times outSQLDependency 超时
【发布时间】:2021-12-10 09:31:10
【问题描述】:

我试图在我的 WPF 应用程序中更改我的 SQL Server 表时收到通知,大约 20 秒后我收到一个超时过期异常,然后

数据库中已经有一个名为“SqlQueryNotificationStoredProcedure-{random id}”的对象。

之后我得到了这个:

找不到存储过程“SqlQueryNotificationStoredProcedure-{...}”。
找不到队列“SqlQueryNotificationService-{...}”,因为它不存在或您没有权限。
无效的对象名称“SqlQueryNotificationService-{...}”

然后:

找不到对话句柄“{id...}”。
找不到对话句柄“{id...}”。

大多数时候只有超时和“已经是一个名为..的对象”异常显示,然后,如果我忽略这些异常并继续,SqlDependency 之后仍然可以正常工作,我也尝试过SqlTableDependency但是那个我无法工作,我迷路了......我真的很感激任何帮助!

这是SqlDependency的代码:

public static void StartDependency()
{
        using (var dbconn = new SqlConnection(ConnStr))
        {
            dbconn.Open();

            using (SqlCommand command = new SqlCommand(*my select command*, dbconn))
            {
                SqlDependency dependency = new SqlDependency(command);
                dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);

                using (SqlDataReader reader = command.ExecuteReader())
                {

                }
            }
        }
}

private static void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
        SqlDependency dependency = sender as SqlDependency;
        dependency.OnChange -= OnDependencyChange;
        Console.WriteLine(e.Source);
        Console.WriteLine(e.Info);
        Console.WriteLine(e.Type);
        StartDependency();
}

在启动时我会这样做:

SqlDependency.Start(ConnStr);

AppDomain.CurrentDomain.UnhandledException += (s, e) => { SqlDependency.Stop(ConnStr); };
Application.Current.MainWindow.Closing += (s, e) => { SqlDependency.Stop(ConnStr); };

StartDependency();

编辑:即使我不在 UnhandledException 上调用“SQLDependency.Stop(ConnStr)”,它仍然会引发相同的异常,并且我在 .NET 5 上使用最新的 System.Data.SqlClient。

【问题讨论】:

  • 在你的真实代码中,command.ExecuteReader() 之后你真的对阅读器做任何处理吗?你真的应该有while(reader.Read()){。因为否则你应该只做command.ExecuteNonQuery()。你也应该给StartStop一个队列名称

标签: c# sql sql-server sqldependency


【解决方案1】:

我最终使用了开箱即用的 SqlDependencyEx!我注意到它明确地将超时设置为 60000 秒,所以也许这对 SqlDependency 也有帮助,但据我了解,我不需要设置类似的东西。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多