WEB开发网
开发学院数据库MSSQL Server 剖析SQL Server 2005查询通知之基础篇 阅读

剖析SQL Server 2005查询通知之基础篇

 2006-11-18 09:16:01 来源:WEB开发网   
核心提示: Imports System.Data.SqlClientPublic Class NotificationTestDim dep As SqlDependencyPublic Function DepTest() As SqlDataReaderDim conn As New SqlCo
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能够向你给出一个通知中最为详细的信息,而这些信息在调试排错时是非常有用的。

上一页  1 2 3 4 5 6 

Tags:剖析 SQL Server

编辑录入:coldstar [复制链接] [打 印]
赞助商链接