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");

相关文章: