首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SqlCommand作为缓存键时,SqlCacheDependency不工作

使用SqlCommand作为缓存键时,SqlCacheDependency不工作
EN

Stack Overflow用户
提问于 2012-01-09 23:02:13
回答 2查看 1.4K关注 0票数 0

这段代码运行得很好,只要数据在数据库中发生变化,它就会使数据失效:

代码语言:javascript
复制
    AggregateCacheDependency aggDep = new AggregateCacheDependency();

                System.Data.SqlClient.SqlCommand ocom = new System.Data.SqlClient.SqlCommand();
                SqlCacheDependency SqlDep = new SqlCacheDependency("DBNAMEINCONFIG", "Products");    
                aggDep.Add(SqlDep);

我不能在整个"Products“表上有一个直接的无效,我需要能够使表上的选择无效。我遇到的问题是,当数据发生变化时,以下代码不会使缓存失效:

代码语言:javascript
复制
AggregateCacheDependency aggDep = new AggregateCacheDependency();

            System.Data.SqlClient.SqlCommand ocom = new System.Data.SqlClient.SqlCommand();
            ocom.CommandText = "SELECT ID,ClinicID,Price,Enabled FROM dbo.Products WHERE ClinicID = 1";
            ocom.Connection = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["DBSTRING"].ToString());
            SqlCacheDependency SqlDep = new SqlCacheDependency(ocom);

            aggDep.Add(SqlDep);

我试图包括所有必要的信息来分析这一点,但请让我知道,如果我应该包括更多!

EN

回答 2

Stack Overflow用户

发布于 2012-01-10 01:40:25

问题是,根据here概述的规则,您不能使用SELECT *进行查询。

以下更改应该可以解决您的问题:

代码语言:javascript
复制
ocom.CommandText = "SELECT ClinicID FROM Products WHERE ClinicID = 1";
票数 0
EN

Stack Overflow用户

发布于 2012-01-10 04:13:29

正如competent_tech指出的,用于构建SqlCacheDependency的查询有相当多的规则。根据这篇MSDN文章,最重要的是:

  1. 不要在查询中使用SELECT *或table_name.*。
  2. 必须使用完全限定的表名称(例如,SELECT

除了这些规则之外,执行用于构建SqlCacheDependencySqlCommand以启用查询通知也很重要:

代码语言:javascript
复制
using (SqlDataReader reader = ocom.ExecuteReader())
{
  while (reader.Read())
  {           
  }
} 

SqlCacheDependency SqlDep = new SqlCacheDependency(ocom);

aggDep.Add(SqlDep);

霍普,这有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8790408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档