SqlDependency 和 SqlCacheDependency 的区别
Differences between SqlDependency and SqlCacheDependency
我确实有一个问题:我正在开发一个 ASP.Net Web 表单和 C# 应用程序,我使用 gridView 来显示来自 table 的数据,所以我决定缓存。
我做了
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();
}
你能告诉我 SqlDependency
和 SqlCacheDependency
之间的区别是什么,哪个更适合我的代码?
SqlDependency 很可能在页面指令中用作输出缓存的 属性,最重要的方面是您必须在 Web.config 中指定您的连接字符串(您可能知道这是一个安全风险)并在标记中使用 polltime 属性。
SqlCacheDependency 是一个class,你需要通过cache.insert或cache.add指定要添加到缓存的数据,你不需要指定connectionstring在 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
我确实有一个问题:我正在开发一个 ASP.Net Web 表单和 C# 应用程序,我使用 gridView 来显示来自 table 的数据,所以我决定缓存。
我做了
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();
}
你能告诉我 SqlDependency
和 SqlCacheDependency
之间的区别是什么,哪个更适合我的代码?
SqlDependency 很可能在页面指令中用作输出缓存的 属性,最重要的方面是您必须在 Web.config 中指定您的连接字符串(您可能知道这是一个安全风险)并在标记中使用 polltime 属性。
SqlCacheDependency 是一个class,你需要通过cache.insert或cache.add指定要添加到缓存的数据,你不需要指定connectionstring在 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