如何: 實作金鑰為基礎的相依性藉由使用 Visual C#.NET 資料快取在 ASP.NET 中

文章翻譯 文章翻譯
文章編號: 308147 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將告訴您,如何實作資料快取利用 Microsoft ASP.NET 應用程式中的索引鍵為基礎的相依性。這份文件] 所示的範例建立並插入快取中的 DataSet 物件,用在另一個快取項目項目上設定藉由參考它的索引鍵相依性。資料快取與時間或檔案為基礎的相依性例如請參考本文中之 < 參考 > 一節。

需求

  • Microsoft Windows 2000 或 Microsoft Windows XP
  • Microsoft 網際網路資訊伺服器 (IIS)
  • Microsoft.NET 架構
  • Microsoft SQL Server

建立 ASP.NET Web 應用程式

使用 Microsoft Visual C#.NET 建立 Microsoft ASP.NET Web 應用程式命名 DataCacher:
  1. 開啟 Microsoft Visual Studio.NET。
  2. 在 [檔案] 功能表上指向 [新增],然後按一下 [專案]。
  3. 在 [新增專案] 對話方塊按一下 [專案類型,] 下的 [Visual C# 專案,然後再按一下 [範本] 下方的 [ASP.NET Web 應用程式
  4. 在 [位置] 方塊中輸入 DataCacher 做為專案名稱來取代預設 WebApplication# 名稱 URL 路徑中。如果您使用本機伺服器,您可以保留伺服器名稱為 http://localhost/DataCacher 中設定位置的 http://localhost。

建置 Web Form

注意: 在 「 執行程式碼 」 一節中詳細說明這一節中所包含的程式碼。

若要建置資料快取範例:
  1. 加入新的 Web Form,命名您的專案在 Visual Studio.NET 的 DataCacheSample.aspx:
    1. 以滑鼠右鍵按一下專案節點,在方案總管。
    2. 按一下 [新增],然後再按一下 [加入新 WebForm
    3. 命名 Web Form DataCacheSample.aspx。
    4. 按一下 [開啟舊檔]。
  2. Web Form 中的 [設計 檢視] 索引標籤上 [Visual Studio.NET IDE (整合式的開發環境) 將 Web Form 按鈕加入至頁面:
    1. 使用拖曳並放作業移動到頁面的 Web 表單按鈕。
    2. 按一下以選取新的按鈕。將 [識別碼] 屬性變更為 CreateNewOrCached,並接著將 文字 屬性變更為 快建立新 Or 取
  3. 新增第二個 Web Form 按鈕:
    1. 使用移動另一個 Web Form 一個拖曳並放作業到頁面,從工具箱] 按鈕。
    2. 按一下以選取新的按鈕。將 [識別碼] 屬性變更為 [移除],並變更 Text 屬性來 移除
  4. 加入 Web Form 標籤:
    1. 使用拖曳並放操作將從工具箱中移到頁面的 Web Form 標籤。
    2. 按一下以選取新的標籤。將 [識別碼] 屬性變更為 CacheStatus,然後再清除 [文字] 屬性。
  5. 使用拖曳並放操作將從工具箱中移到頁面的 Web Form DataGrid 控制項。此控制項將保留 [識別碼] 屬性設定為 [DataGrid1 的預設設定在 [屬性] 窗格中。

加入程式碼

加入程式碼,以插入移除快取項目,與建置快取相依性快取項目:
  1. 用滑鼠右鍵按一下.aspx] 網頁,然後按一下 [檢視程式碼 以開啟程式碼後置頁面。
  2. 在這個範例確定會將 System.Data.SqlClientSystem.DataSystem.Web.Caching 命名空間加入至命名空間列出在程式碼後置頁面中。如果您使用 Visual Studio。若要建立 Web Form 列出在程式碼後置頁面的命名空間的 NET 將類似下列:
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;
    using System.Web.Caching;
    						
    注意: 如果沒有列出命名空間就或命名空間如果多餘的列表存在,您會收到警告。
  3. 在 [設計 檢視] 索引標籤上連按兩下 CreateNewOrCached 按鈕以開啟 [程式碼後置頁面中的 [CreateNewOrCached_Click 事件]。
  4. 將下列程式碼加入至 CreateNewOrCached_Click 事件:
    private void CreateNewOrCached_Click(object sender, System.EventArgs e) {
    	//Attempt to create a DataSet object from the cache entry with the key "CacheDataSetEmployees" 
    	object CacheDataSetEmployees = (DataSet)Cache.Get("CacheDataSetEmployees");
    	
            //Check to see if the object is null
    	if(CacheDataSetEmployees == null)
    	{
    	     //Set a value for the cache entry that will serve as the 
    	     //key for the dependency to be created on
    	     Cache["SqlPubsEmployees"] = "SomeValue";
    
    	     //Create the array of cache key item names
    	     string[] keys = new String[1];
    	     keys[0] = "SqlPubsEmployees";
    				
    	     DataSet ds = new DataSet();
    	     //Create the connection and pass in the ConnectionString
    	    SqlConnection MySqlConn = new SqlConnection("Server=kronicas17;Trusted_Connection=Yes;initial catalog=pubs");
    	     //Create the Data Adapter and pass in the command text and connection to use
    	     SqlDataAdapter MySda = new SqlDataAdapter("SELECT TOP 10 * FROM Employee", MySqlConn);
    	     //Populate the DataTable "Employees" in the DataSet
    	     MySda.Fill(ds,"Employee");
    	     //Set the DataGrid's DataSource to the "Employee" DataTable
    	     DataGrid1.DataSource = ds.Tables["Employee"];
    				
    	     //Create a dependency object referencing the array of cachekeys (keys)
    	     CacheDependency MyDependency = new CacheDependency(null, keys);
    	     //Insert the DataSet into Cache with a dependency on MyDependency
    	     Cache.Insert("CacheDataSetEmployees", ds, MyDependency);
    				MySqlConn.Close();
    				
    	     //Display the status of the DataSet/Cache Entry
    	     CacheStatus.Text = "New Version Created";
    	}
    	else
    	{
    	     //Display the status of the DataSet/Cache Entry
    	     CacheStatus.Text = "Cached Version Used";
    	     //Set the DataSource to the cached version of the DataSet
    	     DataGrid1.DataSource = CacheDataSetEmployees;
            }
            //Bind the DataGrid to the DataSource
    	DataGrid1.DataBind();
    }
    						
    注意: 您可能需要修改 ConnectionString 在這個步驟中才能正常運作與 SQL 伺服器程式碼中。程式碼正常運作,您必須已安裝的 SQL Server Pubs 資料庫。
  5. 設計 檢視之 [] 索引標籤上 [DataCacheSample.aspx 頁,按兩下 移除] 按鈕以開啟 [程式碼後置頁面中的 [Remove_Click 事件。
  6. 將下列程式碼加入至 Remove_Click 事件:
    private void Remove_Click(object sender, System.EventArgs e)
         {
    	//Remove the cache item listed in the cachekeys array (keys)
    	Cache.Remove("SqlPubsEmployees"); 	//Display the status of the cache item
    	CacheStatus.Text = "Cache Item Removed";
         }
    					
  7. 將下列項目加入至 Web.config 檔 <system.web> 和 </system.web> 之間:
    <identity impersonate=”true” />
    
  8. 在 [檔案] 功能表上按一下 [全部儲存] 以儲存 Web Form 和其他相關聯的專案檔。
  9. 在 Visual Studio.NET IDE 中 建置 功能表上, 按一下 [若要建置專案的 [建置]。

執行程式碼

  1. 來執行程式碼,請在 [方案總管] 在 DataCacheSample.aspx 頁面上按一下滑鼠右鍵然後按一下 [在瀏覽器中的檢視
  2. 按一下 [CreateNewOrCached] 按鈕 ; CacheStatus 標籤應顯示"新版本建立",DataGrid 控制項填入。

    注意
    • 新版本建立CacheStatus 標籤的設定是快取索引鍵 CacheDataSetEmployees 不還參考有效的快取項目輸入事件時的結果。在這種情況下建立 資料集DataGrid 控制項繫結至 資料集資料集,會使用快取索引鍵 CacheDataSetEmployees 」 輸入到快取。
    • 從先前的步驟您應該有也注意到名為 MyDependency 將新 CacheDependency 物件的建立。它會藉由 插入 方法加入至快取時,MyDependency 物件會列出為 CacheDataSetEmployees 項目的相依性。請注意,雖然這個範例會示範金鑰為基礎的依存性,您可以使用其他類型的相依性架構快取條件,如檔案或時間戳記,也務必。
  3. 再按一次 CreateNewOrCached 按鈕。CacheStatus 標籤會顯示 「 快取版本 」,指出快取資料集所使用。您可以確認這是快取的資料,藉由使用 SQL 查詢分析器或另一種工具來修改其中 Pubs 資料庫中顯示的記錄。修改資料錄之後再按一下 [CreateNewOrCached] 按鈕。請注意您所做的變更不會顯示。 按一下 [移除],然後再按一下 [CreateNewOrCached 再次以查看對資料庫所做的變更。
  4. 按一下 [移除] 按鈕。CacheStatus 標籤會顯示 「 快取項目已移除 」。具有 SqlPubsEmployees"Remove_Click 事件中使用 Cache.Remove 方法移除索引鍵快取項目。因為您在建立時,列出陣列 (其中包含已移除的項目快取索引鍵名稱) 與 MyDependencyCacheDataSetEmployees 」 項目移除因為您會建立它使用 Insert 方法和參考 MyDependency 做為它的相依性參數。
  5. 再按一次 CreateNewOrCached 按鈕。因為資料集建立 based 在的不再存在快取中引發事件時,CacheStatus 標籤會顯示"新版本建立"的訊息。
  6. 您也可能會注意到 DataGrid 控制項會顯示如填入資料,即使 資料集 項目會從快取中移除。這是 EnableViewState 屬性設定為 True 預設的結果。這會啟用,才能維持控制項的狀態以及這不相關的快取項目操作,在程式碼中。對多的圖形化表示控制項的狀態在每個階段,您可以將 EnableViewState為 False
注意: 像這個範例有關,在實際情況下快取索引鍵陣列 (索引鍵 陣列範例程式碼中) 可能會保留其他資料表的快取索引鍵或其他快取項目,這樣如果其中一個那些項目變更快取項目 (在這個範例中的 CacheDataSetEmployees) 以這個相依性所建立的項目就會從快取中移除也。您可以再作用如有必要使用回呼 ; 回呼,需詳細資訊請參閱本文 < 參考 > 一節。

疑難排解

  • 索引鍵快取索引鍵陣列中所列的名稱必須與實際的快取項目相關聯。如果不是使用相依性項目不會正確地保留在快取中。這就會如果範例程式碼中的 索引鍵 陣列持有另一個陣列元素,元素已設為無效的快取索引鍵名稱。
  • 快取索引鍵陣列有沒有特定的意義,直到使用與 CacheDependency 物件。
  • 如果項目插入與沒有相依性或其他到期快取執行階段會控制當從快取中移除項目。

?考

更多的資訊,有關使用 CacheItemRemovedCallback 委派,請參閱下列 Microsoft 網站:
CacheItemRemovedCallback 代理人
http://msdn2.microsoft.com/en-us/library/system.web.caching.cacheitemremovedcallback(vs.71).aspx
注意: 的 CacheItemRemovedCallback 委派定義回呼方法,來通知應用程式,從快取移除快取的項目時。

更多有關 CacheDependency 類別的資訊,請參閱下列 Microsoft 網站:
CacheDependency 類別
http://msdn2.microsoft.com/en-us/library/system.web.caching.cachedependency(vs.71).aspx
注意: 這個 CacheDependency 類別追蹤快取相依性可以是檔案、 目錄或應用程式快取中的其他物件的關鍵。

各種可用的 ASP.NET 的快取選項的詳細資訊,請參照下列 Microsoft.NET Framework SDK 的文件:
將項目加入至快取
http://msdn.microsoft.com/en-us/library/cc511535.aspx
如需有關各種可用的 ASP.NET 的快取選項的額外資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中發行項]:
305140ASP.NET 藍圖
307225資訊: ASP.NET 快取概觀

屬性

文章編號: 308147 - 上次校閱: 2007年8月28日 - 版次: 2.8
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2003 標準版
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbmt kbcaching kbdatabase kbhowtomaster KB308147 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:308147
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com