2

すべての大陸とそれぞれの国を保存するデータセットがあります。データテーブルをキャッシュしています:

DataSet dset = new DataSet();
string cacheKey = "CoverageDataTable";
object cacheItem = Cache[cacheKey] as DataTable;
if (cacheItem == null)
{
    dset = (DataSet)_obj.GetAllContinent();
    cacheItem = dset.Tables[0];
    Cache.Insert(cacheKey, cacheItem, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromHours(5), CacheItemPriority.High, null);
 }

ここで、データテーブルに変更があった場合は、データベースから新しいデータをフェッチする必要があります。これどうやってするの?

4

1 に答える 1

4

SQL データベースのバージョンによっては、SqlCacheDependency を使用できる場合があります。

あなたのweb.configで非常に簡単に

<caching>
        <sqlCacheDependency pollTime="10000" enabled="true" >
            <databases>
                <add connectionStringName="ConnectionString" name="Coverage"/>
            </databases>
        </sqlCacheDependency>
    </caching>

次に、コードで

private void BindData()
{
    // if null then fetch from the database
    if (Cache["CoverageDataTable"] == null)
    {
        // Create the cache dependency
        SqlCacheDependency dep = new SqlCacheDependency("Coverage", CoverageDataTable");
        string connectionString = ConfigurationManager.ConnectionStrings[
                                        "ConnectionString"].ConnectionString;
        SqlConnection myConnection = new SqlConnection(connectionString);
        SqlDataAdapter ad = new SqlDataAdapter("SELECT ColA, ColB, ColC " +
                                               "FROM CoverageDataTable", myConnection);
        DataSet ds = new DataSet();
        ad.Fill(ds);

        // put in the cache object
        Cache.Insert("CoverageDataTable", ds, dep);
    }

    gvCoverageDataTable.DataSource = Cache["CoverageDataTable"] as DataSet;
    gvCoverageDataTable.DataBind();
}

ここでいくつかの背景を見つけることができます: SqlCacheDependency クラスを使用した ASP.NET でのキャッシュ

于 2012-05-29T06:42:46.763 に答える