您的位置:首页 > 数据库

SQL数据缓存依赖

2013-05-23 00:00 239 查看
1.检查当前数据库是否启动SQL Server Service Broker,检测方法:

SELECT is_broker_enabled FROM sys.databases WHERE name = '数据库名'
或者
Select DATABASEpRoPERTYEX('数据库名','IsBrokerEnabled')
--
(1
为已启用,0为未启用)
如果当前数据库没有启动SQL Server Service Broker,可以执行:

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

<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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: