Sqldependency - 处理时添加的记录

时间:2015-07-07 14:46:00

标签: c# sql sqldependency

我对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();
    }

1 个答案:

答案 0 :(得分:0)

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