asp.net 中SqlDependency緩衝處理

來源:互聯網
上載者:User

       緩衝是每個系統都必定涉及到的功能,一般的緩衝有一個難題——什麼時候清除?如Asp.Net中的cache可以設定一個到期時間,但設定多久合適呢?長了浪費,短了就失去緩衝的意義了。使用SqlDependency進行緩衝則可以解決這個問題。

       SqlDependency是.net2.0封裝的一個類型,當然要配合sql2005或以上版本才能使用。

       SqlDependency類需要資料庫的ServiceBroker來支援,當資料庫中的資料發生變化時通知應用程式更新緩衝,這才是最有效緩衝方式。

 

步驟一:

sql資料庫必須開啟ServiceBroker服務,首先檢測是否已經啟用ServiceBroker,檢測方法:

 

Select  DATABASEpRoPERTYEX('資料庫名稱','IsBrokerEnabled')

 

 

--1表示已經啟用0表示沒有啟用

 

步驟二:

如果ServiceBroker沒有啟用,使用下面語句啟用:

ALTER  DATABASE  <資料庫名稱>  SET  ENABLE_BROKER;

 

步驟三:

在實現基於服務的SQL資料緩衝依賴過程中,需要顯式調用SqlDependency.Start來啟動接受依賴項更改通知的接聽程式。

 

SqlDependency.Start(connectionString);//推薦將這段代碼加到Global.asax的Application_Start方法中 
SqlDependency.Stop(connectionString);//用於關閉,可加在Global.asax的Application_End方法中

 

步驟四:緩衝實現

 使用sqldependency實現緩衝的代碼:

 

 public class CacheHelper
{
static Cache WebCache = HttpContext.Current.Cache;
static string DefaultConn = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;

public static DataTable GetSystemParams()
{
if (WebCache["SystemParam"] == null)
{
string strSQL = "select uSystemParamID,ParamName,ParamValue,Description from dbo.DTS_SystemParam";
SqlDataAdapter da = new SqlDataAdapter(strSQL, DefaultConn);
SqlDependency dep = new SqlDependency(da.SelectCommand);
dep.OnChange += new OnChangeEventHandler(dep_OnChange);
DataTable tbl = new DataTable();
da.Fill(tbl);
WebCache["SystemParam"] = tbl;
return tbl;
}
else
{
return (DataTable)WebCache["SystemParam"];
}
}

private static void dep_OnChange(object sender, SqlNotificationEventArgs e)
{
WebCache.Remove("SystemParam");
}
}


注意:使用 SqlDependency 訂閱查詢通知必須向SQL Server Service Broker提供製定規則的查詢語句,一般來講,必須是簡單的sql查詢語句(不能用*,不能用top,不能用函數,包括彙總函式,不能用子查詢,包括where後的子查詢,不能用外串連,自串連,不能用暫存資料表,不能用變數,不能用視圖,不能垮庫,表名之前必須加類似dbo資料庫擁有者這樣的首碼)例如:select * from table1,select column1 from table1,select count(*) from table1 都是錯誤的sql查詢語句,select column1 from dbo.table1 則是正確的語句。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.