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

使用SqlDependency优化缓存
本文介绍使用SqlDependency对象来实现实时数据缓存的方法,包括配置必要的数据库服务、启用CLR以及具体的应用程序示例。当数据库数据变化时,应用程序能接收到通知并更新缓存。

使用数据缓存技术主要原因是为了提高应用程序性能,但在使用数据缓存技术时,需要知道如何
在数据失去原有作用时终止缓存。SqlDependency 对象允许缓存数据,并在修改数据时发出通知。

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

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

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

    USE MSDB
    GRANT SEND ON SERVICE::
    [http://schemas.microsoft.com/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 对象

    下面是一个简单ASP.NET应用程序, 该应用程序只包含一个 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))
                {
                    command.CommandType = 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 对象会进行相应的更新。

转载于:https://www.cnblogs.com/waylee/archive/2008/10/23/1318074.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值