当我的SQL Server表在我的WPF应用程序中被更改时,我正在尝试获取通知,大约20秒后,我得到一个过期的异常,然后是
数据库中已经有一个名为“SqlQueryNotificationStoredProcedure-{随机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();编辑:即使我没有在SQLDependency.Stop(ConnStr)上调用‘UnhandledException’,它仍然会抛出相同的异常,并且在.NET 5上使用最新的System.Data.SqlClient。
发布于 2021-10-25 17:44:31
最后,我使用了SqlDependencyEx,这是开箱即用的!我注意到它显式地将超时设置为60000秒,所以这可能对SqlDependency也有帮助,但据我所知,我不需要设置类似的东西。
https://stackoverflow.com/questions/69698875
复制相似问题