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(); }