SqlDependency和SqlCacheDependency之间的差异
本文关键字:之间 SqlCacheDependency SqlDependency | 更新日期: 2023-09-27 18:20:31
我确实有一个问题:我正在开发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();
}
你能告诉我SqlDependency
和SqlCacheDependency
之间有什么区别吗?请告诉我哪一个更适合我的代码?
SqlDependency很可能在page指令中用作outputcache的属性,最重要的一点是,您必须在Web.config中指定连接字符串(您可能知道这有安全风险),并在标记中使用polltime属性。
SqlCacheDependency是一个类,您需要指定要通过cache.insert或cache.add添加到缓存中的数据。此外,您不需要在Web.config中指定连接字符串,但可能会使用SERVICE_BROKER而不是aspnet_regsql。此外,如果您决定使用SERVICE_BROCKER,请记住添加全局.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命令,我可能会使用outputcache指令页和SqlDependency,但轮询时间更长,但我的最终建议是使用SqlCacheDependency并通过启用SERVICE_BROKER
ALTER DATABASE testdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE