gpt4 book ai didi

c# - SqlDependency onchange事件死循环

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:40 29 4
gpt4 key购买 nike

我有一个简单的查询,事件在正确的时间触发。但是,一旦触发,SqlDependency 对象的属性 .HasChanges 始终设置为 true

第一次触发 OnChange 时,SqlNotificationEventArgs Info 属性为“Inserted”。第二次触发事件时显示“已更改”。

  • 我在 OnChange 事件中注释掉了我的所有代码,以验证我的代码没有引起更改。
  • 在数据库中启用了 Servicebroker

是否有以下代码导致 onChange 事件无限循环的原因?

static void Main()
{
SqlDependency.Stop(Properties.Settings.Default.DEVConnectionString);
SqlDependency.Start(Properties.Settings.Default.DEVConnectionString);

using (SqlConnection cn = new SqlConnection(Properties.Settings.Default.DEVConnectionString))
{
cn.Open();

using (SqlCommand cmd = new SqlCommand("SELECT UserPageActionLogID, PageActionID FROM dbo.UserPageActionLog WHERE PageActionID != 3 ORDER BY UserPageActionLogID ASC", cn))
{
cmd.Notification = null;

SqlDependency dep = new SqlDependency(cmd);
dep.OnChange += dep_onchange;

using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
//Do nothing on first run
}
}
}
}
Application.Run(); //Prevents the application from closing
}

private static void dep_onchange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dependency = sender as SqlDependency;
dependency.OnChange -= dep_onchange;

//Do stuff for the function. I commented this out and still had an issue

//Resubscribe to the event to continue catching future changes
dependency.OnChange += dep_onchange;
}

最佳答案

似乎 OnChange 处理程序和 SqlDependency 实例都只适用于一个事件。触发事件并取消订阅处理程序后,您需要将处理程序注册到新的 SqlDependency 对象。

有关完整详细信息,请参阅此处的链接:http://msdn.microsoft.com/en-us/library/a52dhwx7(v=vs.80).aspx

关于c# - SqlDependency onchange事件死循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919792/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com