[asp.net]SqlDependency 和 SqlCacheDependency 之间的差异

标签: Asp.net SQLServer C#
发布时间: 2017/3/26 2:10:17
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个问题︰ 我在 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 ,哪一个是更好地为我的代码请吗?

解决方法 1:

相关性是可能使用中的页面指令作为属性为 outputcache,最重要的方面是你必须在 Web.config 中指定您 connectionstring,(正如你可能知道这是安全风险) 和还在标记中使用 polltime 属性。

SqlCacheDependency 是一个类,您将需要指定要添加到缓存中通过 cache.insert 或 cache.add 的数据,你不需要在 Web.config 中指定 connectionstring,但也许,你将有可能使用 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 指令页和相关性但有了更大的 polltime,但我最后的建议是将使用 SqlCacheDependency 并启用通过 SERVICE_BROKER

ALTER DATABASE testdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
官方微信
官方QQ群
31647020