登录论坛 | 注册会员 设为首页 | 收藏本站
当前位置 : 首页>软件学院>数据库>SQL>正文
 
SQL Server2005查询通知

http://www.dbit.cn 2008/5/4 19:19:12  来源:yesky  编辑:阿拉格调
 

在整个的.NET 2.0的设计过程中,SqlDependency底层架构从一种推模式(来自SQL Server)改变为一种拉模式(来自.NET)。这样做的原因是为了解决第一次设计时所导致的一些安全问题。微软的Sushil Chordia在MSDN上发表了一篇有关于这种改进的文章,该文详细描述了这一改进的内在机理。

六. 你的第一个通知

下面,让我们开始使用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表并且编辑某一个字段内容。例如,一旦锁定这一改变,那么,当你把光标移动到表中的一个新行时,断点应该被激活。

本新闻共4页,当前在第3页  1  2  3  4  

收藏】【打印】【进入论坛
  相关文章:

·SQL Server2005数据加密技术应用研究

 
 
 
最新文章

抢先苹果,消息称英特尔芯片采用台积电
三星揭晓业内首款单条 512GB DDR5 内存
vivo 高端新机爆料:120Hz 曲面屏 + 天
vivo Y21 在印度正式上市:Helio P35 芯
微星推出 GeForce RTX 3080 Sea Hawk X
消息称三星 Galaxy Tab S8 系列平板将放
机械革命推出 F6 轻薄本:16 英寸全面屏
英特尔 12 代 Alder Lake CPU 600 系列
雷军:向小米手机 1 首批用户每人赠送价
小米李明谈用户被踢出 MIUI 测试版:大

推荐文章
1
2
3
4
5
6
7
8
9
10
叛逆嫩模性感写真
宫如敏不雅照疯传 看张馨予韩一菲兽兽谁
不惧孔子抢位 阿凡达游戏影音配置推荐
2015第十七届“东北安博会”火爆招商
第十六届东北国际公共安全防范产品博览
2016年第五届中国国际商业信息化博览会
2016年第五届中国国际POS机及相关设备展
互联网电视熟了吗 2013最火电视深解析
桑达获邀出席2015中国(广州)国际POS机
宝获利报名参加“2015年度中国POS机行业
八卦图解 More>>
叛逆嫩模性感写真 宫如敏不雅照疯传 看张馨予韩一菲
周伟童魔鬼身材日本性感写真图  联想V360笔记本模特写真