使用sqlCacheDependency

本文介绍了一种通过配置SQL Server数据库连接及使用SqlCacheDependency来实现缓存与数据库同步更新的方法。具体步骤包括:修改web.config文件以启用更改通知,设置缓存依赖策略,并通过C#代码实现数据集的读取和缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将一个取自SQLServer的数据集放入缓存中了现在想数据库更新的时候缓存中的数据集同步更新

第一步

修改web,config

<!--定义数据库连接-->
<connectionStrings>
<addname="NorthwindConnectionString"connectionString="Server=USERRYRDB;Database=Northwind;UID=sa;pwd=密码"providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<!--定义缓存策略-->
<caching>
<sqlCacheDependencyenabled="true"pollTime="10000">
<databases>
<!--
name:必需的String属性。
要添加到配置集合中的SqlCacheDependencyDatabase对象的名称。
此名称用作@OutputCache指令上SqlDependency属性的一部分。
pollTime:设置SqlCacheDependency轮询数据库表以查看是否发生更改的频率(以毫秒计算)。这儿是一个测试,所以设为10秒,请加大此值
-->
<addconnectionStringName="NorthwindConnectionString"name="Categories"/>
</databases>
</sqlCacheDependency>
</caching>
</system.web>

第二步.定义cachedData测试类

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.Caching;
usingSystem.Data.SqlClient;

/**////<summary>
///SummarydescriptionforCachedData
///</summary>

publicclassCachedData
...{
privatestringKey;
privatestring_Source;
/**////<summary>
///指示数据从哪儿读取的
///</summary>

publicstringSource...{get...{return_Source;}}
publicCachedData()
...{
Key
="Categories";
_Source
="未知";
}


//读取数据
publicDataViewgetFromCache()...{
if(HttpRuntime.Cache[Key]==null)
...{
//取数据
SqlConnectionconn=newSqlConnection();
conn.ConnectionString
=ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
SqlCommandcomm
=newSqlCommand("SELECT[CategoryID],[CategoryName],[Description]FROM[Categories]",conn);
SqlDataAdaptersda
=newSqlDataAdapter(comm);
DataSetds
=newDataSet();
conn.Open();
sda.Fill(ds);
DataViewdv
=ds.Tables[0].DefaultView;
conn.Close();

//启用更改通知
SqlCacheDependencyAdmin.EnableNotifications(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
//连接到SQLServer数据库并为SqlCacheDependency更改通知准备数据库表
SqlCacheDependencyAdmin.EnableTableForNotifications(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString,"Categories");
//制定缓存策略
SqlCacheDependencyscd=newSqlCacheDependency("Categories","Categories");
//插入缓存
HttpRuntime.Cache.Insert(Key,dv,scd);
_Source
="Database";
returndv;
}

else...{
//从缓存中取值
_Source="cache";
return(DataView)HttpRuntime.Cache[Key];

}

}

}


3.测试页面

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%>

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>UntitledPage</title>
</head>
<body>
<formid="form1"runat="server">
<asp:LabelID="Label1"runat="server"Text="Label"></asp:Label>
<asp:DataGridrunat="server"ID="Repeater1"></asp:DataGrid>&nbsp;
</form>
</body>
</html>
其对应cs文件

usingSystem;
usingSystem.Data;
usingSystem.Data.SqlClient;
usingSystem.Configuration;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;

publicpartialclass_Default:System.Web.UI.Page
...{
protectedvoidPage_Load(objectsender,EventArgse)
...{

BindRepeater1();

}

privatevoidBindRepeater1()...{
CachedDatacd
=newCachedData();
this.Repeater1.DataSource=cd.getFromCache();
this.Repeater1.DataBind();
this.Label1.Text=cd.Source;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值