`
yangyou230
  • 浏览: 1651874 次
文章分类
社区版块
存档分类

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

 
阅读更多

  六. 你的第一个通知

  下面,让我们开始使用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+2005+管理与开发技术大全.part1.rar

    第1篇为基础篇,介绍了SQL Server 2005的入门知识、如何安装SQL Server 2005、如何管理与配置SQL Server 2005服务器、如何配置SQL Server 2005网络、如何通过SQL Server Management Studio操作及管理SQL Server 2005...

    SQL+SERVER+2005+开发技术大全.part2.rar

    第1篇为基础篇,介绍了SQL Server 2005的入门知识、如何安装SQL Server 2005、如何管理与配置SQL Server 2005服务器、如何配置SQL Server 2005网络、如何通过SQL Server Management Studio操作及管理SQL Server 2005...

    SQL+SERVER+2005+开发技术大全.part1.rar

    第1篇为基础篇,介绍了SQL Server 2005的入门知识、如何安装SQL Server 2005、如何管理与配置SQL Server 2005服务器、如何配置SQL Server 2005网络、如何通过SQL Server Management Studio操作及管理SQL Server 2005...

    SQL Server 2008宝典.(电子工业.刘智勇.刘径周).part2

    第3章 初识SQLServer2008 42 第3部分 基础操作篇63 第4章 数据库服务器管理64 第5章 数据库管理105 第6章 数据表管理154 第7章数据(记录)操作204 第4部分 数据库管理篇257 第8章 T-SQL程序258 第9章 视图...

    SQL Server 2008宝典.(电子工业.刘智勇.刘径周).part1

    第3章 初识SQLServer2008 42 第3部分 基础操作篇63 第4章 数据库服务器管理64 第5章 数据库管理105 第6章 数据表管理154 第7章数据(记录)操作204 第4部分 数据库管理篇257 第8章 T-SQL程序258 第9章 视图...

    SQL Server 2008宝典.(电子工业.刘智勇.刘径周).part4

    第3章 初识SQLServer2008 42 第3部分 基础操作篇63 第4章 数据库服务器管理64 第5章 数据库管理105 第6章 数据表管理154 第7章数据(记录)操作204 第4部分 数据库管理篇257 第8章 T-SQL程序258 第9章 视图...

    SQL Server 2008宝典.(电子工业.刘智勇.刘径周).part3

    第3章 初识SQLServer2008 42 第3部分 基础操作篇63 第4章 数据库服务器管理64 第5章 数据库管理105 第6章 数据表管理154 第7章数据(记录)操作204 第4部分 数据库管理篇257 第8章 T-SQL程序258 第9章 视图...

    数据库系统概论答案 SQL server 2005 教程

    第一篇 基础篇 第一章 绪论 1.1 数据库系统概述 1.2 数 据 模 型 1.3 数据库系统结构 1.4 数据库系统的组成 1.5 小结 习题 本章参考文献 第二章 关系数据库 2.1 关系数据结构及形式化定义 2.2 关 系 操 作 ...

    SQL Server自动化运维系列:监控跑批Job运行状态

     在上一篇文章中已经分析了SQL SERVER中关于邮件的基础配置,本篇将利用此功能对多台Server的跑批Job进行监控。  本篇实现  1、每天检查服务器中的SQL Server跑批Job的运行状态,如果跑批失败,则发邮件告诉...

    程序员的SQL金典(不错)

    《程序员的SQL金典》分为3部分:第1部分为基础篇,主要讲解数据库对增、删、改、查等SQL的支持,给出了这些SQL的应用案例;第2部分为进阶篇,讲解了函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值...

    21天学会SQL

    第一篇 SQL Server 2008基础篇 第1章 学习数据库的准备 ( 教学视频:58分钟) 15 1.1 认识数据库 15 1.1.1 为什么要使用数据库 15 1.1.2 认识数据库产品 15 1.2 了解数据库对象 17 1.2.1 表 17 1.2.2 视图 17 1.2.3...

    ( 程序员的SQL金典(完整).zip )

    《程序员的SQL金典》分为3部分:第1部分为基础篇,主要讲解数据库对增、删、改、查等SQL的支持,给出了这些SQL的应用案例;第2部分为进阶篇,讲解了函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值...

    程序员的SQL金典完整版

    MS SQL Server、Oracle 和 DB2 中的差异进行了分析;详细讲解数据库对增、删、改、查等 SQL的支持并给出了相应的SQL 应用案例;透彻分析函数、子查询、表连接、不同DBMS中 的 SQL 语法差异、SQL 调优、NULL 值处理、...

    SQL--Server数据库课程设计.doc

    绪 论 3 1.1 设计目的 3 1.2 开发工具选择 3 1.3 开发环境 3 1.4 本报告的主要内容 3 第二章 需求分析 4 2.1系统需求简介 4 2.1.1设计任务 4 2.1.2功能需求分析 4 2.2 功能模块分解图 4 2.2.1学生信息查询模块 ...

    程序员的SQL金典

    《程序员的SQL金典》分为3部分:第1部分为基础篇,主要讲解数据库对增、删、改、查等SQL的支持,给出了这些SQL的应用案例;第2部分为进阶篇,讲解了函数、子查询、表连接、不同DBMS中的SQL语法差异、SQL调优、NULL值...

Global site tag (gtag.js) - Google Analytics