gpt4 book ai didi

c# - SQLDependency + 服务代理

转载 作者:行者123 更新时间:2023-11-30 16:21:40 26 4
gpt4 key购买 nike

我正在使用 SqlDependency 在某些表中的数据发生更改时获得通知。

    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) 如果“某人”非常快速地更改数据怎么办。有可能有些变化不会被通知? (我担心通知和再次订阅之间的时间。

谢谢。

最佳答案

关于 1 - 查询通知通知您某事发生了变化。如果你想获得自上次以来发生的变化——你可能会使用时间戳列。

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

查询通知更适用于数据不经常更改的情况。例如-一些已兑现的分类值。所以-你订阅了一些表的变化,等待变化,当它们发生时你会得到最新版本的数据。应该考虑到查询通知也使用服务器资源,所以如果您有一个巨大的表并且想要获取一些小数据子集的更改,很多查询可能会在性能方面受到影响(类似于索引 View )。

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

关于c# - SQLDependency + 服务代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13033362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com