SqlCacheDependency

系统 1611 0

SqlCacheDependency

web页面代码片段:

web页面代码
String connectionString = " Data Source=localhost;Initial Catalog=BalloonShop;Integrated Security=True " ;
DataTable dt
= (DataTable)HttpContext.Current.Cache[ " Customer_test " ];
if (dt == null )
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
String sqlStr
= " SELECT dbo.Product.ProductID, Name, col_name FROM " +
" dbo.Product inner join dbo.ProductCategory on " +
" dbo.Product.ProductID = dbo.ProductCategory.ProductID inner join " +
" dbo.tb_category on dbo.ProductCategory.CategoryID = dbo.tb_category.col_id " ;
conn.Open();
SqlCommand command
= new SqlCommand();
command.Connection
= conn;
command.CommandText
= sqlStr;
// DataTableCache.Dependency = new SqlCacheDependency(command);
SqlCacheDependency dependency = new SqlCacheDependency(command);
         SqlDataAdapter adapter
= new SqlDataAdapter(command);
DataSet ds
= new DataSet();
adapter.Fill(ds,
" Customers " );
dt
= ds.Tables[ 0 ];
// command.Connection.Close();
DataTableCache.AddCache( " Customer_test " , dt, command);//缓存通知失效 不起作用
DataTableCache.AddCache("Customer_test", dt,
dependency );// 成功
// HttpContext.Current.Cache.Insert("Customer_test", dt, dependency);

}
}

gvwCustomers.DataSource
= dt;
gvwCustomers.DataBind();

DataTableCahche的代码片段:

DataTableCache代码
public class DataTableCache
{
private DataTableCache(){ }
private static SqlCacheDependency dependency = null ;

public static SqlCacheDependency Dependency {
get { return dependency; }
set { dependency = value; }
}
public static void AddCache(String key, DataTable dt,SqlCommand command) {
dependency
= new SqlCacheDependency(command);
HttpContext.Current.Cache.Insert(key, dt, dependency);
}
public static void AddCache(String key, DataTable dt, SqlCacheDependency dependency) {
HttpContext.Current.Cache.Insert(key, dt, dependency);
}
public static void AddCache(String key, DataTable dt) {
HttpRuntime.Cache.Insert(key,dt, dependency);
}
}
当我使用上面红色的部分插入cache的时候,我改变数据库中的数据时,界面上的数据却不会变化,通知失效机制不能成功运行,
当我使用蓝色的部分插入cache的时候,
我改变数据库中的数据时,界面上的数据能发生变化,通知失效机制能成功运行,我很困惑,这到底是什么原因?
提问于2010-01-19 11:57

 

所有回答(2)
0 0
                    
                      
                        这个有问题
                      
                    


private static SqlCacheDependency dependency = null ;

public static SqlCacheDependency Dependency {
get { return dependency; }
set { dependency = value; }
}
public static void AddCache(String key, DataTable dt,SqlCommand command) {
dependency
= new SqlCacheDependency(command);
HttpContext.Current.Cache.Insert(key, dt, dependency);
}

应该是你这边全局static有点问题,更改成静态单件构造函

你更改成试试:

                      
                      
                      
                        public
                      
                      
                      
                      
                        static
                      
                      
                      
                      
                        void
                      
                      
                         AddCache(String key, DataTable dt,SqlCommand command) {       
                      
                      
                        
SqlCacheDependency
_dependency = new SqlCacheDependency(command);
HttpContext.Current.Cache.Insert(key, dt, _dependency);
}



回答于2010-01-19 15:47
这个我试过,好像也不行,
还有就是问题出在command上,在command执行以后,比如执行以下语句之后:
command.ExecuteReader();

SqlDataAdapter adapter = new SqlDataAdapter(command);
在把command赋给SqlCacheDependency时就会不起作用,
而在command执行之前赋给SqlCacheDependency就可以,
但我不太清楚这里边的运行机制
评论于2010-01-19 16:59
1 0

看看这里
http://www.dotnetcurry.com/ShowArticle.aspx?ID=263&AspxAutoDetectCookieSupport=1

的确需要在 cmd.ExecuteNonQuery();之前执行

  SqlCacheDependency dependency = new SqlCacheDependency (cmd);

SqlCacheDependency


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论