首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlDependency与SqlCacheDependency的差异

SqlDependency与SqlCacheDependency的差异
EN

Stack Overflow用户
提问于 2015-11-04 19:50:00
回答 1查看 1.1K关注 0票数 0

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

我做了

代码语言:javascript
复制
aspnet_regsql -ed -E -d Store
aspnet_regsql -et -E -d Store-t Customers

以及web.config中的修改

代码语言:javascript
复制
<caching>
      <sqlCacheDependency pollTime="2000" enabled="true">
        <databases>
          <add name="Store" connectionStringName="StoreConnectionString"/>
        </databases>
      </sqlCacheDependency>
    </caching>

但是现在我必须决定是否使用SqlDependency

代码语言:javascript
复制
<%@ OutputCache Duration=”600″ SqlDependency=”Store:Customers” VaryByParam=”none” %>

或者使用SqlCacheDependency

代码语言:javascript
复制
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之间有什么不同吗?请告诉我哪一个更适合我的代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-04 22:05:16

SqlDependency可能会在页面指令中用作outputcache的属性,最重要的方面是您必须在Web.config中指定连接字符串(您可能知道这是一个安全风险),还必须在标记中使用polltime属性。

SqlCacheDependency是一个类,您需要指定要通过cache.insert或cache.add添加到缓存中的数据,您不需要在Web.config中指定连接字符串,但是您可能会使用SERVICE_BROKER而不是aspnet_regsql,而且如果您决定使用SERVICE_BROKER,记住添加一个global.asax以便指定:

代码语言:javascript
复制
Application_start(){
string connectionString = yourdatabaseconnection;
    System.Data.SqlClient.SqlDependency.Start(connectionString);
} 

和App_end()

代码语言:javascript
复制
Application_end(){
string connectionString = yourdatabaseconnection;
    System.Data.SqlClient.SqlDependency.Stop(connectionString);
} 

由于我已经使用了aspnet_regsql命令,所以我可能会使用outputchache指令页和SqlDependency,但是使用更长的轮询时间,但我的最后建议是使用SqlCacheDependency并通过

代码语言:javascript
复制
ALTER DATABASE testdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33530766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档