ADO.NET 2.0中的查询通知

http://tech.ddvip.com   2008年01月22日    社区交流

内容摘要:学习如何使用ADO.NET 2.0和SQL Server 2005中新的通知技术处理即席数据刷新。

  从数据库客户端使用查询通知

  现在我们已经了解了所有内部细节,让我们编写一个使用查询通知的ADO.NET客户端程序。为什么在我们编写相对简单的客户端代码前要做那么多的解释呢?尽管编写代码是相当简单的,但是必须记住要遵守规则。最常见的问题就是提交了一个无效的查询以及忘记设置Service Broker和用户权限,致使这个强大功能受挫,甚至给某些beta版测试人员的印象是该功能不能工作。一点点的准备和研究就会对您大有帮助。最后,先了解内部细节也是不错的,因为后面我们将设置诸如Service Broker的SERVICEs以及分发器协议的属性,现在您已经完全了解这些术语的含义了。

  您可以在ADO.NET中写一个查询通知的客户端,像我们一样使用OLE DB,甚至使用新的HTTP Web服务客户端,但需要记住的一点就是:查询通知只能通过客户端代码来实现。该特性不允许直接通过T-SQL语句或者SQLCLR存储过程来使用SqlServer数据供应商与SQL Server进行对话。

  您可以使用System.Data.dll程序集中包含的两个类:SqlDependency和SqlNotificationRequest。 如果希望使用分发器自动进行通知,那么使用SqlDependency。如果希望自己处理通知消息,那么使用SqlNotificationRequest。我们来看看每个类的一个例子。

  使用SqlDependency

  使用SqlDependency步骤很简单。首先,创建一个包含您要接收查询通知的SQL语句的SqlCommand;将SqlCommand和SqlDependency关联起来。然后注册SqlDependency对象OnChanged的事件处理程序。接下来执行SqlCommand。您可以处理DataReader,关闭DataReader,甚至关闭相关的SqlConnection。分发器会在您的结果集发生变更时通知您。SqlDependency对象的事件是在另一个线程上引发的;这意味着您必需有心理准备处理那些事件已经引发而您的代码还在继续运行的情形,甚至在事件引发时您可能仍然在处理查询结果集。以下是代码:

来源:51CTO    责编:豆豆技术应用

正在加载评论...