SqlDependency和SqlCacheDependency之间的差异

时间:2015-11-04 19:50:00

标签: c# asp.net sql-server sqldependency sqlcachedependency

我有一个问题:我正在开发一个ASP.Net Web Forms和C#应用程序,我使用gridView来显示表中的数据,所以我决定缓存。

我做了

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之间有什么区别吗?我的代码哪个更好?

1 个答案:

答案 0 :(得分:0)

SqlDependency可能在page指令中用作outputcache的属性,最重要的方面是你必须在Web.config中指定你的连接字符串(因为你可能知道这是一个安全风险)并且还使用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命令,所以我可能会使用outputchache指令页面和SqlDependency但是轮询时间更长,但我最后的建议是使用SqlCacheDependency并通过

启用SERVICE_BROKER
ALTER DATABASE testdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE