0

此代码工作正常,只要在数据库中更改数据,它就会使数据无效:

    AggregateCacheDependency aggDep = new AggregateCacheDependency();

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

虽然我不能对整个“产品”表直接无效,但我需要能够使表上的选择无效。我遇到的问题是以下代码在数据更改时不会使缓存无效:

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);

我试图包含分析此问题所需的所有信息,但如果我应该包含更多信息,请告诉我!

4

2 回答 2

0

问题是,根据此处列出的规则,您不能将SELECT *其用于查询。

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

ocom.CommandText = "SELECT ClinicID FROM Products WHERE ClinicID = 1";
于 2012-01-09T17:40:25.177 回答
0

正如主管技术指出的那样,用于构建的查询有很多规则SqlCacheDependency。根据这篇MSDN文章,最重要的是:

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

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

using (SqlDataReader reader = ocom.ExecuteReader())
{
  while (reader.Read())
  {           
  }
} 

SqlCacheDependency SqlDep = new SqlCacheDependency(ocom);

aggDep.Add(SqlDep);

希望这可以帮助。

于 2012-01-09T20:13:28.717 回答