SqlDependency用法


步驟一:

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

 Select  DATABASEpRoPERTYEX('數據庫名稱','IsBrokerEnabled')
--1表示已經啟用0表示沒有啟用
 

步驟二:

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

 ALTER  DATABASE  <數據庫名稱>  SET  ENABLE_BROKER;
 

步驟三:

在實現基於服務的SQL數據緩存依賴程序中,需要顯式調用SqlDependency.Start來啟動接受依賴項更改通知的偵聽器。

SqlDependency.Start(connectionString);//程序開始時調用一次

SqlDependency.Stop(connectionString);//程序退出是調用一次

 

步驟四:
private void buttonCache_Click(object sender, EventArgs e)
{
            ObjectCache cache = MemoryCache.Default;
            Server s = (Server)cache["OneServer"];
            if (s == null)
            {
                string sql = string.Format("select [ID],[IP],[Port],[Name] from [dbo].[Server] where [ID]={0}", int.Parse(textBoxID.Text));
                CacheItemPolicy policy = new CacheItemPolicy();
                SqlDependency.Start(conStr);
                using (SqlConnection dbc = new SqlConnection(conStr))
                {
                    using (SqlCommand cmd = new SqlCommand(sql, dbc))
                    {
                        cmd.Notification = null;
                        SqlDependency dep = new SqlDependency();
                        dep.AddCommandDependency(cmd);
                        dbc.Open();
                        SqlDataReader reader = cmd.ExecuteReader();
                        if (reader.Read())
                        {
                            s = new Server()
                            {
                                ID = Convert.ToInt32(reader["ID"]),
                                IP = (string)reader["IP"],
                                Port = Convert.ToInt32(reader["Port"]),
                                Name = (string)reader["Name"]
                            };
                            reader.Close();
                        }
                        SqlChangeMonitor monitor = new SqlChangeMonitor(dep);
                        policy.ChangeMonitors.Add(monitor);
                    }
                }
                cache.Add("OneServer", s, policy);
                s = (Server)cache["OneServer"];
            }
            s = (Server)cache["OneServer"];
        }
 

注意:

使用 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 則是正確的語句。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM