我有一个简单的查询,并且事件在正确的时间触发。然而,一旦被解雇,该财产.HasChanges
, 的SqlDependency
对象始终设置为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 http://msdn.microsoft.com/en-us/library/a52dhwx7%28v=vs.80%29.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)