六. 你的第一个通知
下面,让我们开始使用SqlDependency来分析一下所有上面这些是如何协同工作的。
首先,我们创建一个类NotificationTest来存取你的数据。在这个类中,还要创建一个典型的函数以便从Pubs数据库的Authors表中查询一些数据并返回一个SqlDataReader。
| Imports System.Data.SqlClient Public Class NotificationTest Public Function DepTest() As SqlDataReader Dim conn As New SqlConnection(connstring) conn.Open() Dim cmd As New SqlCommand( "SELECT * FROM authors(", conn)") Dim rdr As SqlDataReader rdr = cmd.ExecuteReader() Return rdr End Function End Class |
现在,让我们修改代码来加入这种依赖性。首先,声明一个名为SqlDependency的对象。为了使之用于该类中的其它函数中,我把它定义为一个类变量。
然后,你需要改变这个查询。查询通知要求你显式地列举在你的查询中的列,以及总是使用一种“两部分”的表名。注意一下在修改后的代码示例中的新的查询文本。
然后,实例化新的SqlDependency并且把它依附到命令中。
就是这些。当执行命令时,依赖性随着它直到数据库。在它处理查询的同时,SQL Server能够看到这一依赖性并且把它发送到Service Broker以注册它。
| Imports System.Data.SqlClient Public Class NotificationTest Dim dep As SqlDependency Public Function DepTest() As SqlDataReader Dim conn As New SqlConnection(connstring) conn.Open() Dim cmd As New SqlCommand( _ "SELECT au_id, au_lname,au_fname " & _ "FROM dbo.authors", conn) dep = New SqlDependency(cmd) Dim rdr As SqlDataReader rdr = cmd.ExecuteReader() Return rdr End Function End Class |
现在,你已经注册了依赖性,但是当通知返回到应用程序时你还根本没有捕获它。不过,SqlDependency类提供了两种方式来了解一个通知。一种方式是通过OnChange事件,你可以通过创建一个代理来捕获它;另一种方式是通过属性HasChanges,你可以在你的应用程序逻辑中对之进行测试。在下列代码中,我在OnDepChange事件中添加了代码以便在后面的某个时候测试通知。
| Imports System.Data.SqlClient Public Class NotificationTest Dim dep As SqlDependency Public Function DepTest() As SqlDataReader Dim conn As New SqlConnection(connstring) conn.Open() Dim cmd As New SqlCommand( _ "SELECT au_id,au_lname,au_fname FROM " + _ "dbo.authors", conn) dep = New SqlDependency(cmd) AddHandler dep.OnChange, AddressOf OnDepChange Dim rdr As SqlDataReader rdr = cmd.ExecuteReader() Return rdr End Function '处理器方法 Public Sub OnDepChange(ByVal sender As Object, _ ByVal e As SqlNotificationEventArgs) Dim DepInfo As String = e.Info.ToString '做一些事情以响应通知 End Sub Public ReadOnly Property HasChanges() As Boolean Get Return dep.HasChanges End Get End Property End Class |
现在,我们来看一下其工作原理。首先,把一个断点放到OnDepChange事件的End Sub代码行。然后,从你喜欢的网页、表单程序或控制台程序中调用DepTest函数来进行测试。在返回SqlDataReader后,在Visual Studio 2005的Server Explorer或在SQL Server Management Studio中打开Authors表并且编辑某一个字段内容。例如,一旦锁定这一改变,那么,当你把光标移动到表中的一个新行时,断点应该被激活。
七. SQLNotificationEventArgs
当你看到通知的确从数据库中传来时,你可以分析一下相应变量的值,它是一个SqlNotificationEventArgs对象。SqlDependency总是随着OnChange事件返回这个对象,而且它是很有用的。其中,SqlNotificationInfo是一个具有18种可能值的枚举类型。其中,一些值对应情况正常,而另一些显示出了问题。这些枚举中有Update,Insert和Delete—告诉你在数据中发生了什么类型的变化。还有其它一些值即使在事件发生时也不会被发送。例如,重新启动服务器将激发所有的通知;而枚举值Drop或Truncate告诉你已经对依赖的表实现了某种操作。
另外,还存在一些依赖性甚至还不能被注册的情形,例如如果你试图对一个UPDATE查询设置一个依赖性将返回Invalid。而返回值Query显示你的查询语法并不符合通知的严格规则。上面枚举表中的最后两个枚举值,还有其它几个与不能注册查询相关的枚举值在执行该命令时被立即返回。
通过查找MSDN库中的有关SqlNotificationInfo枚举文档,你可以得到这些枚举的完全列表。
当我一些场合上谈论查询通知时,人们总是问我:“通知是否会告诉你发生了什么事情?”。回答是“不会”。
总之,SQLNotificationEventArgs能够向你给出一个通知中最为详细的信息,而这些信息在调试排错时是非常有用的。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
·SQL Server 数据处理专题 (1485篇文章)
·SQL Server 索引和查询专题 (2717篇文章)
·SQL Server (1448篇文章)
·SQL Server 查询 (33篇文章)
·SQL Server (1449篇文章)
·SQL Server 索引和查询专题 (2717篇文章)
·SQL Server (1448篇文章)
·SQL Server 查询 (33篇文章)
·SQL Server (1449篇文章)
·网络分析软件sniffer pro入门 (12772次浏览)
·Win XP系统内存性能优化 (6761次浏览)
·Windows 2000 安装指南 (3215次浏览)
·防止sql注入的简单方法 (3094次浏览)
·组策略应用技巧 (1643次浏览)
·SQL Server SQL语句导入导出大全 (1365次浏览)
·再谈SQL注入入侵动网SQL版 (1239次浏览)
·ms sql删除重复的记录 (1092次浏览)
·DM分区软件使用详解 (596次浏览)
·在SQL Server中使用存储过程的代码 (593次浏览)
·Win XP系统内存性能优化 (6761次浏览)
·Windows 2000 安装指南 (3215次浏览)
·防止sql注入的简单方法 (3094次浏览)
·组策略应用技巧 (1643次浏览)
·SQL Server SQL语句导入导出大全 (1365次浏览)
·再谈SQL注入入侵动网SQL版 (1239次浏览)
·ms sql删除重复的记录 (1092次浏览)
·DM分区软件使用详解 (596次浏览)
·在SQL Server中使用存储过程的代码 (593次浏览)
·存储厂商追捧微软SQL Server 2005 10-28
·NetApp发布SQL Server 2005数据管理软件 10-28
·飞康IPStor将支持微软SQL Server 2005 10-28
·飞康对SQL Server 2005提供用户化支持 10-28
·初次使用SQL破解某电影网站的记录 10-28
·黑客教学:SQL注入法攻击一日通(V3.0) 10-28
·减少SQL日志的方法 10-28
·传奇3.0--常要用到的SQL脚本 10-28
·传奇3.0--使用SQL数据浏览器来导入和修改你的数据 10-28
·PL/SQL集合增强 10-28
·NetApp发布SQL Server 2005数据管理软件 10-28
·飞康IPStor将支持微软SQL Server 2005 10-28
·飞康对SQL Server 2005提供用户化支持 10-28
·初次使用SQL破解某电影网站的记录 10-28
·黑客教学:SQL注入法攻击一日通(V3.0) 10-28
·减少SQL日志的方法 10-28
·传奇3.0--常要用到的SQL脚本 10-28
·传奇3.0--使用SQL数据浏览器来导入和修改你的数据 10-28
·PL/SQL集合增强 10-28
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容



