我在C#
和Sql Server 2008
开发了一个应用程序。
此处,用户可以从数据库打开列表,此时更新相同的数据库表,指示特定用户已打开当前列表。当另一个用户试图打开相同的列表时,将通知用户说用户A已经打开了该列表并关闭了两个选项或通知用户。
在通知用户进程中,我必须定期检查已打开列表的每个用户的数据库,以查找是否有其他用户发送了通知,表明他们也试图打开同一个列表。
有人按下发送通知选项,而不是定期检查数据库,是否有任何更智能的识别方法。从数据库到系统获取通知?我确实发现了SqlNotificationRequest。 SQL 2008中是否有类似的新功能?
是否可以实现或任何其他替代方案?
答案 0 :(得分:2)
由于您使用的是同质的Microsoft基础结构,因此您可能需要查看SQL Server Service Broker。
服务代理使用队列向任何对其通知感兴趣的人发送消息。您的应用程序可以订阅这些消息,然后根据更改的类型做出相应的反应。
SQL Server Service Broker为消息传递提供本机支持 在SQL Server数据库引擎中排队应用程序。这样做 开发人员更容易创建使用的复杂应用程序 数据库引擎组件之间进行不同的通信 数据库。开发人员可以使用Service Broker轻松构建 分布式和可靠的应用程序。
更多相关信息:An Introduction to SQL Server Service Broker。
使用Service Broker,Microsoft SQL Server 2005中的一项功能,内部 或者外部进程可以发送和接收保证的异步 通过使用Transact-SQL数据操作的扩展来实现消息 语言(DML)。消息可以发送到同一数据库中的队列 作为发件人,到同一SQL Server实例中的另一个数据库,或 到同一服务器上或另一个SQL Server实例上 远程服务器。
答案 1 :(得分:0)
我想这完全取决于你的方法。
如果你只是通过查询来做到这一点。数据库无法知道哪个用户正在查看哪个表。但是,您的应用程序确实需要管理员说明哪个用户当前正在查看哪个表以及如何查看和编辑等等。
如果您使用与DataReader对象(SqlDataReader)的公共服务之类的东西,您可以计算管理这些SqlDataReader及其上一次查询的类的所有实例。
数据读取器与数据库的结果集具有开放连接。也许那是一个领先者?
这整个问题与用户查看网站的数量相同?一旦加载,你怎么知道他们是否还在观看它?