多次试验发现这个基本上是,想它缓存时不缓存,想他失效时他有不失效.
有以下几点需要注意
1.首先在相应数据库来启动Service Broker 代码如下
Alert DataBase wow52cn Set Enable_Broker
2.在Global.asax 文件中需要以下代码来启动数据库缓存通知
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
System.Data.SqlClient.SqlDependency.Start(ConfigurationManager.ConnectionStrings["wow52.cn"].ConnectionString);
}
void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码
System.Data.SqlClient.SqlDependency.Stop(ConfigurationManager.ConnectionStrings["wow52.cn"].ConnectionString);
}
3.数据操作代码
public DataSet GetData()
{
DataSet ds = HttpRuntime.Cache["URLListKEY"] as DataSet;
if (ds != null)
{
Label1.Text = "来自Cache";
return ds;
}
else
{
Label1.Text = "数据库";
ds = new DataSet();
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DuoWanKill"].ConnectionString);
SqlCommand cmd = new SqlCommand("Select urlId,url,ClassId From dbo.urlList where urlId >100 order By urlId DESC", conn);
SqlCacheDependency sqlDep = new SqlCacheDependency(cmd);
SqlDataAdapter da = new SqlDataAdapter(cmd);
conn.Open();
da.Fill(ds);
conn.Close();
HttpRuntime.Cache.Insert("URLListKEY", ds, sqlDep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration);
return ds;
}
}
注意,其中Select urlid....查询中不要有top 表名应加schema 如dbo.urlList等具体看sql 的文当
你在测试时最好,用Select FieldName1 ,FieldName2...From dbo.TableName 这样的句字
还有在电脑内存不足时建议重新启动后在测试,这样效果明显点