关于ASP.NET缓存与数据库中的数据表关联查询

 
  


我们可以在ASP.NET使用缓存技术,例如数据库中表RoleInfo,如果该表没有发生变化(这里包括修改,删除,添加),则网页读取内存中的缓存项,显示到界面上。如果对表进行了操作,则自动移除缓存项,直接连接数据库查询数据并显示到界面上。我简单的演示一下,抛砖引玉吧!

 
  

原理是:首先通知数据库中的一张表(例如RoleInfo)生成一张缓存表并且自动生成触发器。当RoleInfo发生修改时,触发触发器,数据库中的缓存表会发生变化,缓存会自动移除。

 
  

我的页面有个按钮,按钮的作用是添加缓存依赖。还有个数据控件,用来显示数据。代码如下

 
  
protected void Button1_Click(object sender, EventArgs e)
{
//如果没有缓存
if (Page.Cache["key"]==null)
{
//自定义的数据操作类
DALProvider dal = new DALProvider();
//创建数据集 这里可能有点多此一举哈。。
dal.CreateDataSet("RoleInfo");
DataSet ds = dal.ProviderData;
//根据连接字符串和表名通知该数据库的表实行缓存依赖通知
//EnableTableForNotifications是静态方法,有两个重载方法
//第一个参数为数据库的连接字符串,第二个参数为缓存所依赖的数据库表名
SqlCacheDependencyAdmin.EnableTableForNotifications(dal.ConStr, "RoleInfo");
//通过web配置文件读取ZitOCS需要的连接字符串,并指明数据集中与缓存依赖的表
//第一个参数为web节点指定链接字符串,第二个参数为数据集中与缓存依赖的DataTable
SqlCacheDependency sqlCache = new SqlCacheDependency("ZitOCS","RoleInfo");
//插入缓存。第一个参数为缓存名称,第二个为数据源,第三个为依赖实例
Page.Cache.Insert("key", ds, sqlCache);
}
}

web.config中需要配置节点

<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings>
<add name="ZitOCSConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ZitOCS.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="10000">
<databases>
<add name="ZitOCS" connectionStringName="ZitOCSConnectionString"/>
</databases>
</sqlCacheDependency>
</caching>
//sqlCacheDependency节点的属性 enabled表示开启缓存 pollTime表示每隔一段时间向数据库轮询,一旦有了变化就移除缓存项

 读取缓存就非常简单了,把代码贴出来

 protected void ReadFromSource() 
{
if (Cache["key"]==null)
{
DALProvider dal = new DALProvider();
dal.CreateDataSet("RoleInfo");
DataSet ds = dal.ProviderData;
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
}
else
{
DataSet ds = (DataSet)Cache["key"];
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
}
}
//一个数据提供类

public class DALProvider
{
private DataSet ds = new DataSet();
private readonly string conStr = ConfigurationManager.ConnectionStrings["ZitOCSConnectionString"].ConnectionString;

public string ConStr
{
get { return conStr; }
}

private readonly string sqlStr;
public DataSet ProviderData {
get
{
if (ds.Tables.Count==0)
{
return null;
}
return ds;
}
}
//默认查询字符串
public DALProvider()
{
this.sqlStr = "select * from RoleInfo";
}
//自定义查询字符串
public DALProvider(string sqlStr)
{
this.sqlStr = sqlStr;
}
//创建数据集
public void CreateDataSet(string TableName)
{
SqlDataAdapter da = new SqlDataAdapter(sqlStr, conStr);
da.Fill(ds, TableName);
}
}

最后在网页加载的时候调用ReadFromSource() 方法即可,我就不多解释了。好了,基本就这样了功能算是实现了

转载于:https://www.cnblogs.com/pca-nana/archive/2011/12/19/2293636.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值