代码public void CacheIn()
{
//先更新数据,再重新录入cache,重建连接
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
string ConnStr = "C:/Inetpub/wwwroot/WebApplication1/Data/test.mdb";
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= "+ConnStr;
conn.Open();
//数据库连接串
//更新数据
System.Data.OleDb.OleDbCommand zfcmd=new System.Data.OleDb.OleDbCommand("update zfuser set Metal=300",conn);
zfcmd.ExecuteNonQuery();
//更新读取
System.Data.OleDb.OleDbDataAdapter zfadp=new System.Data.OleDb.OleDbDataAdapter("select * from star",conn);
DataTable zfdatatable=new DataTable(); //datatable类型,为搜索方便而设立
zfadp.Fill(zfdatatable);
//重建缓存,10分钟后过期
System.Web.HttpContext.Current.Cache.Insert("Book",zfdatatable,null,DateTime.Now.AddMinutes(1),Cache.NoSlidingExpiration,CacheItemPriority.Default,new CacheItemRemovedCallback(RemovedProducts));
//get data
if(conn.State != ConnectionState.Closed)
conn.Close();
}
public static void RemovedProducts(string k, Object v, CacheItemRemovedReason r)
{
//先更新数据,再重新录入cache,重建连接
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
string ConnStr = "C:/Inetpub/wwwroot/WebApplication1/Data/test.mdb";
conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data source= "+ConnStr;
conn.Open();
//数据库连接串
//更新数据
System.Data.OleDb.OleDbCommand zfcmd=new System.Data.OleDb.OleDbCommand("update zfuser set metal=500",conn);
zfcmd.ExecuteNonQuery();
//更新读取
System.Data.OleDb.OleDbDataAdapter zfadp=new System.Data.OleDb.OleDbDataAdapter("select * from star",conn);
DataTable zfdatatable=new DataTable(); //datatable类型,为搜索方便而设立
zfadp.Fill(zfdatatable);
//重建缓存,10分钟后过期
System.Web.HttpContext.Current.Cache.Insert("Book",zfdatatable,null,DateTime.Now.AddMinutes(1),Cache.NoSlidingExpiration,CacheItemPriority.Default,new CacheItemRemovedCallback(RemovedProducts));
//get data
if(conn.State != ConnectionState.Closed)
conn.Close();
}cachein用按钮触发.然后无论等多久时间,都没有进行回调(查数据库里数据除了第一次调用有变化之后都没有变化),请问是什么原因呢?谢谢

解决方案 »

  1.   

    我理解你好像要实现让Cache每过10分钟自动更新?我觉得这样逻辑上是不行的,让Cache在过期之前重建自己?在没有Request的情况下,让Cache一直存在内存里是没有意义的(而且一旦你的程序成功执行,你如何清掉这个Cache?)。
    一般的做法是在aspx的Page_Load里(而不是Button_Click)先判断Cache是否存在,如果不存在(或已过期)就重建。回调函数主要用来在Cache失效时处理一下与此Cache相关的数据。
      

  2.   

    实际上是想通过回调的过程,对数据库进行操作,从而实现数据的自动更新.原因是因为这些东西以后可能会有很多用户查看,如果每个用户查看一次就进行一次数据更新,恐怕性能会有比较大的问题.谢谢ivee,但还是不明白,为什么回调的部分没有执行呢?