SqlDependency 一段时间后不监听数据库了
SqlDependency 刚刚开始能同步到数据库的数据,让程序跑一段时间dependency_OnChange就不激活了,服务器的数据库一直在变化! 开始跑了2个多小时都正常!
conn = new System.Data.SqlClient.SqlConnection(SqlHelper.ConStrUrl);
command = conn.CreateCommand();
command.CommandText = "SELECT [serialNumber],[address],[description] FROM [dbo].[sq_scan_history_table] where rtuid='" + rtuid + "'";
SqlDependency.Start(SqlHelper.ConStrUrl); //启动
GetData();//获取数据
private void GetData()
{
command.Notification = null;//清除
SqlDependency dependency = new SqlDependency(command); //设置通知
dependency.OnChange += new OnChangeEventHandler(sqlDependency_OnChange); //通知事件
using (SqlDataAdapter adapter = new SqlDataAdapter(command)) //查询数据
{
System.Data.DataSet ds = new DataSet();
adapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
}
/// <summary>
/// 通知事件,数据库有新数据,激活此事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void sqlDependency_OnChange(object sender, SqlNotificationEventArgs e)
{
//因为是子线程,需要用invoke方法更新ui
if (this.InvokeRequired)
{
this.Invoke(new OnChangeEventHandler(sqlDependency_OnChange), new object[] { sender, e });
}
else
{
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= sqlDependency_OnChange;
//通知之后,当前dependency失效,需要重新getdata并且设置通知
GetData();
}
}