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();
    }
相關文章
相關標籤/搜索