【问题标题】:Sqldependency - Records added while processingSqldependency - 处理时添加的记录
【发布时间】:2015-07-07 14:46:00
【问题描述】:

我有一个关于 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();
    }

【问题讨论】:

    标签: c# sql sqldependency


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。我是从 sql-console 工作中做到这一点的。这项工作的目的是不断监视任何数据更改(这是队列表 - 正如您所建议的那样)并发送电子邮件/处理它并更新它/标记为已读。正如我在上面解释的那样,我唯一担心的是在处理过程中添加的数据会发生什么。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    相关资源
    最近更新 更多