我們可以在ASP.NET使用緩存技術,例如資料庫中表RoleInfo,如果該表沒有發生變化(這裡包括修改,删除,添加),則網頁讀取記憶體中的緩存項,顯示到界面上。如果對表進行了操作,則自動移除緩存項,直接連接配接資料庫查詢資料并顯示到界面上。我簡單的示範一下,抛磚引玉吧!
原理是:首先通知資料庫中的一張表(例如RoleInfo)生成一張緩存表并且自動生成觸發器。當RoleInfo發生修改時,觸發觸發器,資料庫中的緩存表會發生變化,緩存會自動移除。
我的頁面有個按鈕,按鈕的作用是添加緩存依賴。還有個資料控件,用來顯示資料。代碼如下
protected void Button1_Click(object sender, EventArgs e)
{
//如果沒有緩存
if (Page.Cache["key"]==null)
{
//自定義的資料操作類
DALProvider dal = new DALProvider();
//建立資料集 這裡可能有點多此一舉哈。。
dal.CreateDataSet("RoleInfo");
DataSet ds = dal.ProviderData;
//根據連接配接字元串和表名通知該資料庫的表實行緩存依賴通知
//EnableTableForNotifications是靜态方法,有兩個重載方法
//第一個參數為資料庫的連接配接字元串,第二個參數為緩存所依賴的資料庫表名
SqlCacheDependencyAdmin.EnableTableForNotifications(dal.ConStr, "RoleInfo");
//通過web配置檔案讀取ZitOCS需要的連接配接字元串,并指明資料集中與緩存依賴的表
//第一個參數為web節點指定連結字元串,第二個參數為資料集中與緩存依賴的DataTable
SqlCacheDependency sqlCache = new SqlCacheDependency("ZitOCS","RoleInfo");
//插入緩存。第一個參數為緩存名稱,第二個為資料源,第三個為依賴執行個體
Page.Cache.Insert("key", ds, sqlCache);
}
}
web.config中需要配置節點
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings>
<add name="ZitOCSConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ZitOCS.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="10000">
<databases>
<add name="ZitOCS" connectionStringName="ZitOCSConnectionString"/>
</databases>
</sqlCacheDependency>
</caching>
//sqlCacheDependency節點的屬性 enabled表示開啟緩存 pollTime表示每隔一段時間向資料庫輪詢,一旦有了變化就移除緩存項
讀取緩存就非常簡單了,把代碼貼出來
protected void ReadFromSource()
{
if (Cache["key"]==null)
{
DALProvider dal = new DALProvider();
dal.CreateDataSet("RoleInfo");
DataSet ds = dal.ProviderData;
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
}
else
{
DataSet ds = (DataSet)Cache["key"];
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
}
}
//一個資料提供類
public class DALProvider
{
private DataSet ds = new DataSet();
private readonly string conStr = ConfigurationManager.ConnectionStrings["ZitOCSConnectionString"].ConnectionString;
public string ConStr
{
get { return conStr; }
}
private readonly string sqlStr;
public DataSet ProviderData {
get
{
if (ds.Tables.Count==0)
{
return null;
}
return ds;
}
}
//預設查詢字元串
public DALProvider()
{
this.sqlStr = "select * from RoleInfo";
}
//自定義查詢字元串
public DALProvider(string sqlStr)
{
this.sqlStr = sqlStr;
}
//建立資料集
public void CreateDataSet(string TableName)
{
SqlDataAdapter da = new SqlDataAdapter(sqlStr, conStr);
da.Fill(ds, TableName);
}
}
最後在網頁加載的時候調用ReadFromSource() 方法即可,我就不多解釋了。好了,基本就這樣了功能算是實作了
轉載于:https://www.cnblogs.com/pca-nana/archive/2011/12/19/2293636.html