首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLDependency +服务代理

SQLDependency +服务代理
EN

Stack Overflow用户
提问于 2012-10-23 22:58:08
回答 1查看 4.1K关注 0票数 3

当某些表中的数据发生更改时,我使用SqlDependency来获取通知。

代码语言:javascript
复制
    private void subscribeBroker()
    {
        using (var conn = new SqlConnection(connString))
        {
            conn.Open();

            var cmd = new SqlCommand("SELECT text FROM dbo.Test");
            cmd.Connection = conn;

            var dependency = new SqlDependency(cmd);
            dependency.OnChange += dependency_OnChange;
            SqlDependency.Start(connString);

            cmd.ExecuteNonQuery();
        }
    }

    void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        //Do something...
        subscribeBroker();
    }

它正在工作,但我有一些问题。

1)我没有找到一种方法来获取哪一行被更改的信息。我需要读取整个表中的所有数据,看看有什么不同。有没有办法获取这些信息?(主ID或其他什么)也许使用与SqlDependency不同的方法?

2)如果“某人”更改数据非常快,该怎么办?有没有可能某些更改不会被通知?(我关心的是通知和我再次订阅之间的时间。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-25 16:43:41

About 1- query通知会通知你事情发生了变化。如果你想知道自上次以来发生了什么变化,你可以使用时间戳列。

关于2-查询通知通知您的更改,然后删除。然后,您再次订阅通知。丢弃和创建通知之间平均时间是不发送有关更改的通知的时间。

查询通知更多的是针对数据不经常更改的情况。例如-一些现金分类值。因此,您订阅某些表中的更改,等待更改,并在更改发生时获得最新版本的数据。应该考虑到查询通知也会使用服务器资源,所以如果您有很大的表,并且想要在一些小的数据子集上获得更改,那么许多查询可能会在性能方面受到影响(类似于索引视图)。

如果您需要根据更改的数据采取一些操作,并且每个更改都很重要,那么我猜触发器+服务代理可能会更有效。或者,根据您的需求,更改数据捕获。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13033362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档