本文執行個體講述了ASP.NET資料庫緩衝依賴,分享給大家供大家參考。具體如下:
一般在ASP.NET中,Cache類最酷的特點是它能根據各種依賴來良好的控制自己的行為。以檔案為基礎的依賴是最有用的,檔案依賴項是通過使用 Cache.Insert 並提供引用檔案的 CacheDependency 對象添加的
複製代碼 代碼如下:
Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("authors.xml")));
但是當我們想讓緩衝根據資料庫中表的變化而失效並重建該緩衝的時候,應該怎麼做呢 – 這種情景在很多應用程式中都存在。Asp.net沒有為監視資料庫表的變化提供內在的直接緩衝支援。利用SQL Server的不常用的系統預存程序sp_makewebtask ,是可以達到這個目的的,這個預存程序本來是用作從查詢中產生web頁面的,但是我們只要稍作修改- 在觸發器中使用它,我們就可以取得一個合理有效途徑,當資料庫某張表的記錄被更新,刪除或者修改時來修改某個特定的檔案,這樣會使在CacheDependency執行個體中的檔案監視進程偵測到檔案的變化,從而使緩衝失效。事實上,因為CacheDependency 類工作在UNC檔案協議上,我們可以在整個Web Farm上部署這個解決方案,Web Farm上每台機器上的應用程式副本都會通過UNC檔案路徑來監視WebFarm中某台單個機器上的同一個檔案
廢話少說,讓我們建立一個簡單的web應用程式,來示範它是如果工作的。首先,我們將會使用我們SQL Server中都信賴的Northwind範例資料庫。建立一個簡單的DataGrid來顯示Employees表中的記錄. 我們要做的第一件事情就是建立觸發器。
複製代碼 代碼如下:
CREATE TRIGGER WriteCacheDepFile ON [dbo].[Employees]
FOR INSERT, UPDATE, DELETE
AS
EXEC sp_makewebtask '\\peter\C$\Cache\mycache.txt', 'SELECT top 1 FirstName FROM employees'
以上預存程序就是簡單的告訴SQL Server,如果Employee表發生任何變動,就根據一個簡單的查詢來更新”mycache.txt”檔案,有這個簡單的查詢語句其實足夠了,只要它是一個有效T-SQL語句,SQL Server會很樂意的去更新那個檔案。
接下來,我們需要建立一個目錄,並設為共用。你可能要更新該檔案的存取權限,以使它可以被寫入,注意,我這裡使用的是管理員共用”C$”.另外,你還需要建立一個空的文字檔,"mycache.txt".
好,現在可以建立我們的應用程式了。首先,在web.config檔案中輸入依賴檔案名稱,這樣做可以使我們在修改依賴檔案的時候不需要重新部署應用程式。
在web.config檔案的根部,添加appSettings配置節:
複製代碼 代碼如下:
</system.web>
<appSettings>
<!—緩衝依賴檔案路徑 -->
<add key="dependencyFile" value="\\peter\Cache\mycache.txt" />
</appSettings>
</configuration>
現在,讓我們在Global類中建立緩衝機制,這樣我們不需要在任何頁面中編寫特定的代碼
複製代碼 代碼如下:
public class Global : System.Web.HttpApplication
{
Cache _cache =null;
public static bool blnReflash = false;
public const string ConnStr = "server=localhost;database=Northwind;uid=sa;pwd=";
public const string strSQL = "SELECT EmployeeID, lastname, firstname FROM Employees";
protected void Application_Start(Object sender, EventArgs e)
{
_cache = Context.Cache;
RefreshCahe(null,null,0);
}
protected void Session_Start(Object sender, EventArgs e)
{
if(HttpContext.Current.Cache["Employees"]==null)
RefreshCache(null,null,0);
}
static void RefreshCache(string key,object item,CacheItemRemoveReason reason)
{
SqlDataAdapter adapter = new SqlDataAdapter(strSQL,ConnStr);
DataSet ds = new DataSet();
adapter.Fill(ds,"Employees");
CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(RefreshCache);
}
希望本文所述對大家的asp.net程式設計有所協助。