cache的数据库回调缓存不会失败,一直不变,但AspNet_SqlCacheTablesForChangeNotification表 是有变化的,动作一次就加1代码如下:
web.config配置
</httpModules>
    <caching>
      <sqlCacheDependency enabled="true" pollTime="500" >
        <databases>
          <add connectionStringName="gft_esp" name="Sql_CacheDependency"/>
        </databases>
      </sqlCacheDependency>
    </caching>
</system.web>
代码:aspx.cs
protected void a_query_Click(object sender, EventArgs e)
    {       // bangding();       
        View_value();
    }
    public void View_value()
    {
        string[] ds = HttpRuntime.Cache["Key"] as string[];        
        if (ds != null)
        {
            Label4.Text = "来自Cache"+ds[0];
        }
        else
        {
            num_status();
        }
    
    }
    public string[] num_status()
    {
        string[] value = { };        string sql = @"SELECT count(Read_Status) as temp FROM [Mess_Reader] where Read_Status=0";        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["gft_esp"].ConnectionString);
        SqlCommand cmd = new SqlCommand();
        try
        {
            cmd.Connection = conn;
            conn.Open();
            cmd.CommandText = sql;
            SqlDataReader rs = cmd.ExecuteReader();
            SqlCacheDependency dependency = new SqlCacheDependency(cmd);//把连接实例cache
            List<string> message_content = new List<string>();
            while (rs.Read())
            {
                message_content.Add(rs["temp"].ToString().Trim());
            }
            rs.Close();
            conn.Close();
            value = message_content.ToArray();
            HttpRuntime.Cache.Insert("Key", value, dependency, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration);
        }
        catch (System.Data.SqlClient.SqlException ex)
        {
            conn.Close();
        }
        finally
        {
            conn.Close();        }
        return value;
    }请高手过目看看代码有没有错误,

解决方案 »

  1.   

    这个我也只能帮你顶了,之前我本地测试的也没有成功,当时好像有位仁兄跟我说过可能是MS SQL的版本问题,我测试用的是MS SQL 2005企业开发版,具体版本型号我没注意看,按他说的,应该是版本不对。"缓存不会失败,一直不变,但AspNet_SqlCacheTablesForChangeNotification表 是有变化的,动作一次就加1"不过你的这情况比我的好多了,至少你还能触发改变数据表的标识,可惜没能触发缓存失效事件