SQL Server 2005中查询通知的开启

SQL Server 2005的推出,使企业级的应用上了一个崭新的台阶,
也使.NET平台的根基进一步稳固,因为其两者的结合使用使数据库开发的简
便性不言而喻,Reporting Services、Notification Services等诸多功能
都让人心潮澎湃,今天就介绍一下其中的一个功能:查询通知的使用。
 查询通知简单的说就是在应用程序中向数据库发送一个查询请求并
请求查询通知后,数据库会监视任何执行修改操作的DML,当操作修改了所
监视的数据时,其会向应用程序发送消息告诉程序数据已修改。发送的消息
将通过sp_DispatcherProc存储过程发给应用程序,应用程序中将以
SqlDependency的OnChang事件接收消息,然后在OnChang中执行自己想要
的操作。


 要使用查询通知请参考一下几个方面:
1、必须在msdb数据库中的QueryNotificationService服务上相Guest用户授
予发送权限,因为在修改数据时,SqlDenpendency对象会使用
ServiceBroker将消息发送给QueryNotificationService服务。
use msdb
grant send on service::
[http://schemas.microsoft.com/SQL/Notifications/QueryNotificationS
ervice]
to guest
方括号中的语句像一个url地址,但其实是QueryNotificationService服务
的完整名称,注意大小写不能错。
2、在数据库服务器上开启CLR,因为所用到的一个存储过程
sp_DispatcherProc中的代码是用.net的代码写的。
use master
exec sp_configure 'clr enabled', 1
reconfigure
3、启用Service Broker
alter database 数据库名 set ENABLE_BROKER
执行完后,可以用SELECT DATABASEPROPERTYEX('数据库名',
'IsBrokerEnabled')来验证是否开启了Service Broker,返回1表示true,
返回0表示false
4、如果数据库用户执行的命令包含通知订阅请求,则必须为此用户授予对
执行命令所在数据库的 SUBSCRIBE QUERY NOTIFICATIONS 权限。
use dbname
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO database_principal
5、创建通知的主体必须对运行查询的数据库具有下列权限才能使用
SqlDependency 成功创建通知:
CREATE SERVICE
CREATE QUEUE
CREATE PROCEDURE
6、若要接收通知,订阅用户必须对订阅数据库的
QueryNotificationErrosQueue 具有 RECEIVE 权限。
GRANT RECEIVE ON QueryNotificationErrosQueue TO login
7、还需要目标设备的 SEND 权限:
GRANT SEND ON SERVICE:://theservice to login
8、运行查询的用户必须对要访问通知的表具有 SELECT 权限。
在程序的代码上可以察看MSDN,有很详细的代码,最重要的一点是select语
句的写法,必须写出所有列名,不能使用*,且表名必须使用两个名称来定
义,如:dbo.tablename。
如果配置正确,打开SQL Profiler,运行程序后,可以看见程序向数据库发
送的包请求。另外需要注意的是SQL Server 2005 Express版不提供查询通
知,而且将Express版的数据库移植到正式版后查询通知似乎有问题,因为
本人就是移植了Express版的数据库后用了两天时间也没把查询通知做出来
,后来重建数据库后一切正常。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值