回答

收藏

SqlDependency onchange事件无限循环

技术问答 技术问答 188 人阅读 | 0 人回复 | 2023-09-12

我有一个简单的查询,并且该事件在正确的时间触发。但是,一旦触发,.HasChanges该SqlDependency对象的属性总是设置为true。
: |) l# ^# E( y# ~第一次触发OnChange时,SqlNotificationEventArgs Info属性为“ Inserted第二次触发事件是已更改。
8 I, w3 M# J% f1 `. K6 J1 \我在OnChange事件中注明了我所有的代码,以验证我的代码没有引起更改。
4 _4 ?7 g; f6 Y数据库中已启用Servicebroker
以下代码是否有原因?onChange事件的无限循环?
' I0 ^3 P# _+ b& j" R3 P' K2 ?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;}               
, s/ U; v+ F& K" g2 s& D, N/ ^    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则