-1

我有一个在C#和中开发的应用程序Sql Server 2008

在这里,用户可以从数据库中打开列表,同时更新相同的数据库表,指示特定用户已打开当前列表。当另一个用户试图打开同一个列表时,会通知用户说用户 A 已经打开了列表,并且有两个选项关闭或通知用户。

在通知用户过程中,我必须定期检查每个打开列表的用户的数据库,以查找是否有任何其他用户发送通知,表明他们也尝试打开相同的列表。

一旦有人按下发送通知选项,是否有任何更智能的识别方式,而不是定期检查数据库。像从数据库向系统获取通知之类的东西?我确实发现了SqlNotificationRequest。SQL 2008 中是否有任何类似的新功能?

是否有可能实现或任何其他替代方案?

4

2 回答 2

2

由于您使用的是同构 Microsoft 基础架构,因此您可能需要查看SQL Server Service Broker

服务代理使用队列向任何对其通知感兴趣的人发送消息。您的应用程序可以订阅这些消息,然后根据更改的种类做出反应。

SQL Server Service Broker 为 SQL Server 数据库引擎中的消息传递和排队应用程序提供本机支持。这使开发人员可以更轻松地创建复杂的应用程序,这些应用程序使用数据库引擎组件在不同的数据库之间进行通信。开发人员可以使用 Service Broker 轻松构建分布式且可靠的应用程序。

更多关于它的信息:SQL Server Service Broker 简介

借助 Microsoft SQL Server 2005 中的一项功能 Service Broker,内部或外部进程可以通过使用对 Transact-SQL 数据操作语言 (DML) 的扩展来发送和接收有保证的异步消息。可以将消息发送到与发送者相同的数据库中的队列、相同 SQL Server 实例中的另一个数据库或同一服务器或远程服务器上的另一个 SQL Server 实例。

于 2012-09-17T08:44:40.793 回答
0

我想这完全取决于你的方法。

如果你只是通过查询来做到这一点。数据库无法知道哪个用户当前正在查看哪个表。但是,您的应用程序确实如此,并且必须由经理来说明哪个用户当前正在查看哪个表以及如何查看和编辑等。

如果您使用带有 DataReader 对象 (SqlDataReader) 的公共服务之类的东西,您可以计算管理这些 SqlDataReader 及其最后查询的类的所有实例。

数据阅读器与数据库的结果集有一个打开的连接。也许那是一个线索?

这整个问题等于有多少用户正在查看一个网站?加载后,您如何知道他们是否仍在查看它?

于 2012-09-17T08:26:48.580 回答