我对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();
}
答案 0 :(得分:0)
您所描述的是数据更改和应用通知的典型非同步特性。简而言之,可能会不断发生变化,您的应用程序将无法实时看到它们。此外,无论您的前端应用是否开放,都可能会发生变化。是否需要查看正在更改的数据,以便在前端应用程序上做出决策,或者是否需要查看其他用户所做的数据更改。 您可能实现的一种方式是以底层触发器填充的表格形式的更改队列。然后对您的前端应用进行编码,以定期从该表中读取并将其标记为已读。这将允许您从应用程序视图中解除数据更改,并可能会看到一些处理性能提升。