2015-11-04 129 views
0

我的確有一個問題:我正在研究ASP.Net Web窗體和C#應用程序,並且我使用gridView來顯示錶中的數據,所以我決定緩存。SqlDependency和SqlCacheDependency之間的差異

我做了

aspnet_regsql -ed -E -d Store 
aspnet_regsql -et -E -d Store-t Customers 

,並在web.config修改:

<caching> 
     <sqlCacheDependency pollTime="2000" enabled="true"> 
     <databases> 
      <add name="Store" connectionStringName="StoreConnectionString"/> 
     </databases> 
     </sqlCacheDependency> 
    </caching> 

但現在我必須決定是否使用SqlDependency

<%@ OutputCache Duration=」600″ SqlDependency=」Store:Customers」 VaryByParam=」none」 %> 

或者使用SqlCacheDependency

private void BindData() { 
    if (Cache["Users"] == null) {    
     SqlCacheDependency dep = new SqlCacheDependency("Store", "Customers"); 
     string connectionString = ConfigurationManager.ConnectionStrings[ 
             "ConnectionString"].ConnectionString; 
     SqlConnection myConnection = new SqlConnection(connectionString); 
     SqlDataAdapter ad = new SqlDataAdapter("SELECT FirstName, LastName " + 
               "FROM Users", myConnection); 
     DataSet ds = new DataSet(); 
     ad.Fill(ds); 
     Cache.Insert("Cust", ds, dep); 
    } 
    gvUsers.DataSource = Cache["Cust"] as DataSet; 
    gvUsers.DataBind(); 
} 

請您告訴我SqlDependencySqlCacheDependency之間有什麼區別,哪個更適合我的代碼?

回答

0

SqlDependency可能在page指令中用作outputcache的屬性,最重要的方面是您必須在Web.config中指定您的connectionstring(因爲您可能知道這是安全風險)並且還可以使用poll中的polltime屬性。

SqlCacheDependency是一個類,你需要指定想要通過cache.insert或cache.add添加到緩存中的數據,你不需要在Web.config中指定連接字符串,但也許你會可能使用SERVICE_BROKER代替aspnet_regsql和,如果你還決定使用SERVICE_BROKER記得要以指定添加一個Global.asax:

Application_start(){ 
string connectionString = yourdatabaseconnection; 
    System.Data.SqlClient.SqlDependency.Start(connectionString); 
} 

和App_end()

Application_end(){ 
string connectionString = yourdatabaseconnection; 
    System.Data.SqlClient.SqlDependency.Stop(connectionString); 
} 

,因爲我」已經使用aspnet_regsql命令我可能會se outputchache指令頁面和SqlDependency但具有更大的輪詢時間,但我最終的建議是使用SqlCacheDependency並啓用SERVICE_BROKER,通過

ALTER DATABASE testdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE