首页 > 数据库 >剖析SQL Server 2005查询通知之基础篇(2)

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

时间:2023-04-10 15:07:52浏览次数:38  
标签:Service SqlDependency SQL Server Start 2005 查询


四. 为使用查询通知作准备


  因为默认情况下SQL Server 2005处于高度安全的状态,所以你需要“打开”一些功能才能使用查询通知。首先,你要使用的每一个数据库都需要启动Service Broker功能。为此,你可以在T-SQL中使用如下命令实现:



USE mydatabase
 ALTER DATABASE mydb SET ENABLE_BROKER


  另外,你需要授予一些SQL Server权限以允许非管理员帐户能够参与使用查询通知。



  

五. SqlDependency.Start和Stop


  SqlDependency和SqlCacheDependency都要求,在任何通知请求前先调用静态方法SqlDependency.Start()。这个方法负责创建一个SqlConnection以实现在数据改变时接收通知。注意,你仅需要在一个应用程序的生命周期的开始建立这些内容。例如,在一个ASP.NET应用程序中,global.asax文件的Application_Start事件处理器就是实现这一功能的好地方。



  注意,对包含在通知中的每一个连接都应该调用Start方法。因此,如果你在应用程序中存取多个数据库,那么你需要为每一个数据库调用Start。在下列示例中,有一个针对Pubs数据库的连接串pubsConn,它在这个应用程序的web.config文件中定义。



  为了切断这个连接,你可以使用SqlDependency.Stop(),这也是一个静态方法。



Sub Application_Start(ByVal sender as Object, _
 ByVal e as EventArgs)
 System.Data.SqlClient.SqlDependency.Start _
 (System.Configuration.ConfigurationManager. _
 Connectionstrings("pubsConn").ConnectionString)
 End Sub
 Sub Application_End(ByVal sender as Object,
 ByVal e as EventArgs)
 System.Data.SqlClient.SqlDependency.Stop _
 (System.Configuration.ConfigurationManager. _
 Connectionstrings("pubsConn").ConnectionString)
 End Sub



  如果你在调用Start和Stop的同时观察SQL Server Profiler,那么你会看到许多有趣的信息。当调用Start时,应用程序运行一个查询以确保支持Service Broker,然后创建一个存储过程备以后用于清除在Service Broker基础结构中的SqlDependency队列和服务。最后,它运行一个SQL Server 2005 WaitFor命令,该命令负责查询在Notification Service部分的入口。这就是如果你使用ADO.NET的低级SqlNotificationRequest对象的话所有你需要显式完成的事情。



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


标签:Service,SqlDependency,SQL,Server,Start,2005,查询
From: https://blog.51cto.com/u_130277/6180897

相关文章

  • 剖析SQL Server 2005查询通知之基础篇(3)
    六.你的第一个通知下面,让我们开始使用SqlDependency来分析一下所有上面这些是如何协同工作的。首先,我们创建一个类NotificationTest来存取你的数据。在这个类中,还要创建一个典型的函数以便从Pubs数据库的Authors表中查询一些数据并返回一个SqlDataReader。ImportsSyste......
  • pymysqlpool踩坑和应用
    上周部署一个web服务时用到了多线程操作mysql数据库,虽然数据可以操作入库成功,但是一直报错‘pymysql.err.InterfaceError:(0,'')’。查了下资料是因为多线程操作引起的报错,需要使用连接池管理数据库连接。chatGPT也给出了以下回答:你可以使用连接池库(如pymysqlpool、DBUtils等......
  • 52、Pod-弹性伸缩-HPA-HorizontalPodAutoscaler、metrics-server
    Kubernetes学习目录1、安装metrics-server1.1、项目地址https://github.com/kubernetes-sigs/metrics-server当前版本:v0.6.3主要用于获取资源的参数,不然HPA无法使用1.2、下载yaml资源配置清单wgethttps://github.com/kubernetes-sigs/metrics-server/releases/downlo......
  • mysql数据库锁优化和注意 -- [转一篇很好的文章]
    为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。本章将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析。......
  • 【MySQL】数据库基础
    1.什么是数据库数据库是用来存储数据的。那么我们之前学习过的存储数据可以使用文件,那么为什么还要弄个数据库呢?这就要谈谈用文件保存数据的几个缺点:文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便因此为了解决上述的问题,专家们设计出更利......
  • 保护和升级PostgreSQL
    PostgresqlPostgreSQL是一种流行的开源关系型数据库管理系统,被许多组织用于存储和管理他们的数据。然而,数据库系统中的数据很容易受到攻击和泄露,因此必须采取安全措施和定期进行升级。本文介绍了保护和升级PostgreSQL的一些方法。一、开启审计PostgreSQL支持审计功能,可以记录......
  • 【MySQL--02】库的操作
    1.库的操作1.1创建数据库语法:CREATEDATABASE[IFNOTEXISTS]db_name[create_specification[,create_specification]...]create_specification:[DEFAULT]CHARACTERSETcharset_name[DEFAULT]COLLATEcollation_name说明:大写的表示关键字[]是可选项CHARACTERSET:指定......
  • 在Linux中配置MySQL并远程连接
    一.安装前的检查和准备工作。1.1检查自己的liunx是否安装过mysqlrpm-qa|grepmysql​1.1.1如果有的话,就删除(XXXX是自己的mysql目录)rpm-e--nodepsmysql-xxxx1.2查询所有的mysql对应的文件夹whereismysqlmfind/-namemysql​1.2.1删除相关目录或者文......
  • Loki采集Mysql errorlog,你值得拥有的错误日志聚合系统
    说到分布式日志存储系统,大家肯定对ELK、EFK这些工具并不陌生。可是它们都基于Elasticsearch存储,搭建复杂,耗资源,上手难。所以,个人非常推崇Grafana Labs开源的Loki 轻量级日志聚合分析系统Loki使用标签来作为索引,而不是对全文进行检索,所以在搜索上会有一定的局限性。但是,也能满......
  • mysql 5.1 chm 优化摘选
    1如果正使用非事务表,不应该使用MySQL来检查列的内容。一般情况,最安全的(通常是最快的)方法是让应用程序确保只向数据库传递合法值;如id=(int)$id2可移植性:如果想要使用Informix或DB2,不应该使用超过18个字符的列名3MySQL在检索和更新MyISAM表记录方面很快,但是在同一个表上混合......