作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 SQLDependency,以便在数据库发生变化时通知我。程序启动后,它工作得很好。当我进行第一次更改时,事件会触发。呜呜……太好了但是,如果我进行了第二次更改,该事件就不会再次触发。我已经搜索了我认为的所有网络,但没有发现任何关于这个问题的信息。仅发现 OnChange-Event 在循环中触发的问题。谁能帮帮我?
这里有一小段代码:
private void GetStates()
{
if (!DoesUserHavePermission())
return;
SqlDependency.Stop(con);
SqlDependency.Start(con);
using (SqlConnection cn = new SqlConnection(con))
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT Bla, Bla2, ..FROM dbo.[BLA3]"
cmd.Notification = null;
cmd.Dispose();
SqlDependency dep = new SqlDependency(cmd);
dep.OnChange += new OnChangeEventHandler(dep_OnChange);
cn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
state.Clear(); //In this Case "state" is a List<string>
while (dr.Read())
{
state.Add(dr.GetString(0) + "|" + dr.GetInt32(3));
}
dr.Dispose();
dr.Close();
}
}
}
}
我的 OnChange-Event 看起来像这样:
private void dep_OnChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dep = sender as SqlDependency;
dep.OnChange -= this.dep_OnChange;
using (SqlConnection cn = new SqlConnection(con))
{
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT Bla, Bla2, ..FROM dbo.[BLA3]";
cmd.Notification = null;
if (e.Type == SqlNotificationType.Change)
{
if (cn.State != ConnectionState.Open)
{
cn.Open();
}
using (SqlDataReader dr = cmd.ExecuteReader())
{
state.Clear(); // Clear and Refill the stringlist "state"
while (dr.Read())
{
state.Add(dr.GetString(0) + "|" + dr.GetInt32(3));
}
}
}
cn.Close();
}
}
this.GetStates(); //to go ahead and wait for a new change
}
问题出在哪里?
最佳答案
我也遇到了这个问题。您需要创建一个新的 SqlDependency 实体(在从 OnChange 事件取消订阅现有实体之后),然后运行一个新的 ExecuteReader 命令。我从这篇文章中得到了这个想法:
http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events
这通常是有道理的,因为一旦您收到更改通知,您通常会想要重新查询数据。
关于c# - SQLDependency_OnChange-Event 仅触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430896/
我正在使用 SQLDependency,以便在数据库发生变化时通知我。程序启动后,它工作得很好。当我进行第一次更改时,事件会触发。呜呜……太好了但是,如果我进行了第二次更改,该事件就不会再次触发。我已
我是一名优秀的程序员,十分优秀!