Cache.Insert()里面的依赖项,到底怎么个依赖法?比如所我想依赖于数据库里的一个表,该怎么写?请各位高手给指点下,谢谢了。

解决方案 »

  1.   

    数据库以来使用依赖缓存
    SqlCacheDependency类支持与System.Data.SqlClient.SqlDependency类进行集成。应用程序可创建SqlDependency对象,并通过OnChanged事件处理程序接受通知进行注册。这样,应用程序不仅可以使用Sql server 2005的查询通知机制来监测使用SQL查询结果无效的数据更改,并将缓存对象从缓存中移除,而且还可以轻松获取数据更改通知,以便刷新缓存 
    <add name="strcode" connectionString="data source=127.0.0.1;initial catalog=code;user id=sa;password="  providerName="System.Data.SqlClient" /> 
    <sqlCacheDependency enabled="true" pollTime="6000"> 
                    <databases> 
                        <add name="code" connectionStringName="strcode" /> 
                    </databases> 
                </sqlCacheDependency>      public static object GetCache(string CacheKey) 

        System.Web.Caching.Cache objCache = HttpRuntime.Cache; 
        return objCache[CacheKey]; 

    public static void SetCache(string CacheKey, object objObject, System.Web.Caching.CacheDependency dep) 

        System.Web.Caching.Cache objCache = HttpRuntime.Cache; 
        objCache.Insert( 
            CacheKey, 
            objObject, 
            dep, 
            System.Web.Caching.Cache.NoAbsoluteExpiration,//从不过期 
            System.Web.Caching.Cache.NoSlidingExpiration,//禁用可调过期 
            System.Web.Caching.CacheItemPriority.Default, 
            null); 

    protected void Page_Load(object sender, EventArgs e) 

        string CacheKey = "test"; 
        object objModel = GetCache(CacheKey);//从缓存中获取 
        if (objModel == null)//缓存里没有 
        { 
            objModel = GetData();//把当前时间进行缓存 
            if (objModel != null) 
            { 
                //依赖数据库codematic中的P_Product表变化 来更新缓存 
                System.Web.Caching.SqlCacheDependency dep = new System.Web.Caching.SqlCacheDependency("code", "User"); 
                SetCache(CacheKey, objModel, dep); 
            } 
        } 
        GridView1.DataSource = (DataSet)objModel; 
        GridView1.DataBind(); 

    private DataSet GetData() 

        string conString = "data source=127.0.0.1;initial catalog=code;user id=sa;password="; 
        string strSQL = "SELECT * FROM User"; 
        SqlConnection myConnection = new SqlConnection(conString); 
        DataSet ds = new DataSet(); 
        myConnection.Open(); 
        SqlDataAdapter adapter = new SqlDataAdapter(strSQL, myConnection); 
        adapter.Fill(ds, "User"); 
        myConnection.Close(); 
        return ds;