1)检查数据库是否开启Broker
SELECT is_broker_enabled FROM sys.databases WHERE name = databasename;
2)开启Broker
ALTER DATABASE databasename SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE databasename SET ENABLE_BROKER;
3)在Global.asax启动依赖项更改通知的侦听
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
SqlDependency.Start(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
SqlDependency.Stop(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
}
在 Sql server连接的登录账号必须要有db_owner权限
4)查询数据并缓存数据
DataTable dt = HttpContext.Current.Cache["dt"] as DataTable;
if (dt == null)
{
using (SqlConnection sqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString))
{
sqlCon.Open();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlCon;
sqlCmd.CommandText = "SELECT CustomerNo,CustomerName from dbo.Customer";
SqlCacheDependency scd = new SqlCacheDependency(sqlCmd);
SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);
dt = new DataTable();
sda.Fill(dt);
HttpContext.Current.Cache.Insert("dt", dt, scd);
}
Response.Write("<h1> Cache is null</h1>");
}
else
{
Response.Write("<h1>Data is from Cache</h1>");
}
GridView1.DataSource = dt;
GridView1.DataBind();
或者监听整个表的数据:
SqlCacheDependency scd = new SqlCacheDependency("databaseName","tableName");
首先要使用sqlnet_regsql.exe 注册
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe -S <serverName> -U <user Id> -P <password> -d <database> -t <tableName> -et
同时在web.config加入:
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="1000" >
<databases>
<add name="databaseName" connectionStringName="connstring" pollTime="1000" />
</databases>
</sqlCacheDependency>
</caching>
或者使用代码注册数据更改通知:
System.Web.Caching.SqlCacheDependencyAdmin.EnableNotifications(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString);
System.Web.Caching.SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString,"Customer");