Sqldependency -处理过程中添加的记录
本文关键字:记录 添加 过程中 处理 Sqldependency | 更新日期: 2023-09-27 18:01:36
我有一个关于sql依赖的问题。假设我的应用程序在底层查询数据更改时收到通知,我计划从表中选择数据,处理它并重新订阅/启动依赖项。如果处理需要1-2分钟,并且在平均时间内,可能会在此处理时间内添加一些数据。不确定该数据将如何得到通知,或者我是否必须等待下一个更改发生,这可能是几分钟到几小时?
下面是我的示例代码让我知道,如果我错过了什么
代码: private void LoadNotifications()
{
DataTable dt = new DataTable();
using (SqlCommand command = new SqlCommand("SELECT ID FROM dbo.NOTIFICATIONS", m_sqlConn))
{
command.Notification = null;
SqlDependency dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(OnDependencyChange);
if (m_sqlConn.State == ConnectionState.Closed)
{
m_sqlConn.Open();
}
//using (SqlDataReader reader = command.ExecuteReader())
//{
// if (reader.HasRows)
// {
//lETS ASSUME THIS TAKES 2-3 MINUTES
// }
//}
}
}
private void OnDependencyChange(object sender, SqlNotificationEventArgs e)
{
SqlDependency dependency = sender as SqlDependency;
dependency.OnChange -= OnDependencyChange;
LoadNotifications();
}
你所描述的是数据更改和应用通知的典型非同步性质。简而言之,变化可能会不断发生,你的应用不会实时看到它们的发生。此外,无论你的前端应用是否打开,这些变化都可能发生。是否需要查看正在更改的数据,以便在前端应用程序上做出决定,或者您是否需要查看其他用户所做的数据更改。实现这两种情况的一种方法是,使用由底层触发器填充的表形式的更改队列。然后编写前端应用程序,定期从该表中读取数据,并将其标记为已读。这将允许您从应用程序视图中分离数据更改,并可能看到一些处理性能的提高。