【问题标题】:Differences between SqlDependency and SqlCacheDependencySqlDependency 和 SqlCacheDependency 的区别
【发布时间】:2015-11-05 07:39:56
【问题描述】:

我确实有一个问题:我正在开发一个 ASP.Net Web 窗体和 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 之间有什么区别吗?哪一个更适合我的代码?

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多