SQL数据缓存依赖

1.检查当前数据库是否启动SQL Server Service Broker,检测方法:         web

SELECT is_broker_enabled FROM sys.databases WHERE name = '数据库名'
或者
Select DATABASEpRoPERTYEX('数据库名','IsBrokerEnabled')
-- (1 为已启用,0为未启用)                 

若是当前数据库没有启动SQL Server Service Broker,能够执行: sql

ALTER DATABASE 数据库名 SET ENABLE_BROKER

 

2.在SQL Server中实现数据缓存依赖,须要显式调用 SqlDependency.Start()方法来启动接收依赖项更改通知的侦听器。一般在global.asax文件的 Application_Start()方法中实现调用。 数据库

void Application_Start(object sender, EventArgs e) 
    {
        //在应用程序启动时运行的代码
        System.Data.SqlClient.SqlDependency.Start(string connectionString);  //开启SQLServer数据缓存依赖
    }


 void Application_End(object sender, EventArgs e) 
    {
        //在应用程序关闭时运行的代码
         System.Data.SqlClient.SqlDependency.Stop(string connectionString);  //关闭SQLServer数据缓存依赖
    }


从上面的代码段中咱们能够看出start()方法中的一个参数是数据库链接字符串,咱们要将其保存在配置文件web.config中。启用SqlCacheDependency c#


<connectionStrings>
	<add connectionString="server=.;database=UserInfo;uid=sa;pwd=svse" name="connStr" providerName="System.Data.SqlClient"/>
</connectionStrings>
<caching>
<sqlCacheDependency pollTime="6000" enabled="true">
<databases>
<add connectionStringName="connStr" name="UserInfo"/>  <!--connectionStringName的值必须与connectionStrings的值相同-->
</databases>
</sqlCacheDependency>
</caching>

3.在代码中使用缓存,并为其设置SqlCacheDependency依赖: 缓存

public void User_Bind()
    {
        DataSet ds;
        string connstr=System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
        if (Cache["userinfo"] == null)
        {
            SqlConnection conn = new SqlConnection(connstr);
            SqlCommand cmd = new SqlCommand("select userName,Address from dbo.Tab_user", conn);
            ds = new DataSet();
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds);

            //启动监听
            SqlDependency.Start(connstr);
            //启用更改通知
            SqlCacheDependencyAdmin.EnableNotifications(connstr);
            //链接到 SQL Server 数据库并为 UserInfo 更改通知准备数据库表 dbo.Tab_user
            SqlCacheDependencyAdmin.EnableTableForNotifications(connstr, "dbo.Tab_user");
            //制定缓存策略
            SqlCacheDependency cdep = new SqlCacheDependency("UserInfo", "dbo.Tab_user");

            //把查询到的数据放入缓存
            Cache.Insert("UserInfo", ds, cdep);

        }
        else
        {
            ds = (DataSet)Cache["userinfo"];
        }
        this.gv_user.DataSource = ds;
        this.gv_user.DataBind();
    }
相关文章
相关标签/搜索