2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 使用 SqlDependency 对象缓存数据以提高性能

使用 SqlDependency 对象缓存数据以提高性能

时间:2021-12-08 18:14:06

相关推荐

使用 SqlDependency 对象缓存数据以提高性能

使用数据缓存技术主要原因是为了提高应用程序性能,但在使用数据缓存技术时,需要知道如何

在数据失去原有作用时终止缓存。SqlDependency 对象允许缓存数据,并在修改数据时发出通知。

使用SqlDependency 对象之前需要开启下面的数据库服务。

一、必须在 MSDB 数据库中的 QueryNotificationService 服务上想 Guest 用户授予发送权限。

运行以下代码启动 QueryNotificationService 服务:

USE MSDB

GRANT SEND ON SERVICE::

[/SQL/Notification/QueryNotificationService]

TO GUEST

注:QueryNotificationService 服务的完整 URL 名称是区分大小写的。

二、SqlDependency 对象会使用 Service Broker 将消息发送给 QueryNotificationService

服务,所以需要启用 Service Broker。

运行以下代码启动 Service Broker:

USE Master

ALTER DATABASE Northwind SET ENABLE_BROKER

三、在数据库服务器上启用CLR。

启用 CLR 命令如下:

USE Master

EXEC sp_configure 'clr enabled', 1

RECONFIGURE

使用 SqlDependency 对象

下面是一个简单应用程序, 该应用程序只包含一个 GridView 对象。加载窗体的时候

首先执行 SqlDependency.Start 方法,然后调用 UpdateGrid 方法填充网格控件。如果数据库中

的数据发生变化,则数据库会给应用程序发送一个通知,这时程序就会引发SqlDependency 的

OnChange 事件。

C#

public partial class _Default : System.Web.UI.Page

{

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(

ConfigurationManager.ConnectionStrings["LocalSqlSever"].ConnectionString);

protected void Page_Load(object sender, EventArgs e)

{

SqlDependency.Start(builder.ConnectionString);

UpdateGrid();

}

private void UpdateGrid()

{

using (SqlConnection connection =

new SqlConnection(builder.ConnectionString))

{

using (SqlCommand command =

new SqlCommand("Search", connection))

{

mandType = CommandType.StoredProcedure;

connection.Open();

SqlDependency dependency =

new SqlDependency(command);

dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

GridView1.DataSource = command.ExecuteReader();

GridView1.DataBind();

}

}

}

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)

{

UpdateGrid();

}

}

}

private void dependency_OnChange(object sender, SqlNotificationEventArgs e)

{

UpdateGrid();

}

启动该应用程序后,如果运行一个能够改变数据表中数据的程序,如 Microsoft SQL Managerment Studio.

在修改表中数据后,则会发现 GridView 对象会进行相应的更新。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。