string s=(string)Cache["aa"];
if (s==null)
{
s = "1";
string constr = "server=.;database=Test;user id=**;password=**";
System.Data.SqlClient.SqlDependency.Start(constr);
SqlConnection con = new SqlConnection(constr);
SqlCommand com = new SqlCommand("Select CategoryId,Name,Descn from dbo.Category", con);
SqlCacheDependency scd = new SqlCacheDependency(com);
this.Cache.Insert("aa", s, scd);
}为什么表中的数据更改了Cache["aa"]中的数据没有别清空呢?而我用轮询的方式却没有问题: string s=(string)Cache["aa"];
if (s==null)
{
s = "1";
SqlCacheDependency scd = new SqlCacheDependency("Test","Category");
this.Cache.Insert("aa", s, scd);
}这样做(当然Web.config中有相应的配置),当表的数据改变时Cache["aa"]就可以清空。为什么第一种非轮询的方式不行呢?在百度搜索了两天了,还没有解决
解决方案 »
- C#项目中,怎么使窗体的焦点一直在同一个按钮上(就像登陆QQ时的那样,一按回车就相当于点击确定)
- 请问listview为何只显示第一列的内容
- 输出路径的问题
- 访问excel的问题
- winform中DataGridView显示查询后的数据,然后为DataGridView增加一行数据,怎么保存到数据库?
- 我定义int类型变量,变量默认为十六进制,而不是平常的十进制的?
- 自由讨论:大家谈谈对c#的认识
- tabControl中同一个tabPage进行切换
- 寻合作者
- 来者有分:公司原网站使用ASP做的,我想用ASP.NET重写,大家认为可行吗?有没有设计或技术方面的好的建议?
- combox组合框的selectedValue 的详细介绍
- .NET可否编写API?
假设我们在一个地方修改了数据库,比如影响了两个表ta、Category中的数据,我们可以写这样两句 Cache.Insert("表ta最后变动时间", DateTime.Now.Ticks);
Cache.Insert("表Category最后变动时间", DateTime.Now.Ticks);
然后在读取与数据库表相关数据时就可以写:string s=(string)Cache["aa"];
if (s==null)
{
s = 从数据库中查询数据();
Cache.Insert("aa", s, new CacheDependency (new string[]{},new string[]{"表Category最后变动时间"});
}
约定全局的cache单元作为依赖项,也是可以的。当然这样做,如果别的应用程序不经过我们的应用程序直接修改数据库,我们的程序就得不到通知。但是这样做的好处也很明显,跟任何数据库都没有关系,我们的程序自己从业务逻辑层面控制了缓存。
没搞过,不过p哥的方法很不错。
按照时间来判断。