在SqlDataSource中清除缓存

时间:2009-06-01 20:13:48

标签: c# .net caching sqldatasource

我需要在启用了缓存的情况下手动清除SqlDataSource上的缓存。我已经尝试设置EnableChaching = false,并且CacheDuration = 0(以及= 1)并且似乎没有任何内容已经过期缓存中的内容 - 尽管它们似乎确实阻止了新的SELECT被缓存。

如何手动使该缓存失效?

感谢。

4 个答案:

答案 0 :(得分:14)

我今天刚刚开始研究这个并发现这篇文章,这看起来像是最好的解决方案:

Simple way to invalidate SqlDataSource cache programmatically

<asp:SqlDataSource ID="x" EnableCaching="True" CacheKeyDependency="MyCacheDependency"/>

protected void Page_Load(object sender, EventArgs e)
{ // Or somewhere else before the DataBind() takes place
  if (!IsPostBack)
  {
      //prime initial cache key value if never initialized
      if (Cache["MyCacheDependency"] == null)
      {
        Cache["MyCacheDependency"] = DateTime.Now;
      }
  }
}


// Evict cache items with an update in dependent cache:
Cache["MyCacheDependency"] = DateTime.Now;

答案 1 :(得分:0)

禁用缓存(EnableCaching = false)然后在重新启用缓存之前强制新选择(SqlDataSourceInstance.Select(new DataSourceSelectArguments()))会清除所选的CommandText和CommandParameters的特定组合,因此这是一个开始。

但它仍保留了SqlDataSource执行的其他查询组合的缓存,因此这并不能解决所有问题。

答案 2 :(得分:0)

确保您的CacheExpirationPolicy是绝对的。使用非零CacheDuration(0表示无限缓存持续时间)。

答案 3 :(得分:0)

供将来使用! 我遇到了同样的问题,尽管“ EnableCaching = false”,但是在繁重的工作中,我看到了一些缓存!这种缓存使我错过了许多数据! :( 经过三天多的检查其他原因,我发现这可能与缓存有关! 所以我使用“ Response.Cache.SetCacheability(HttpCacheability.NoCache);”在我后面的代码上。它似乎可以正常工作,并且在12个小时后我没有丢失最后一个:)