SqlDependency 的使用


1、SqlDependency是什么:

  SqlDependency 對象表示應用程序和 SQL Server 實例間的查詢通知依賴關系。應用程序可以創建一個 SqlDependency 對象並進行注冊以通過OnChangeEventHandler 事件處理程序接收通知。

  它提供了這樣一種能力:當被監測的數據庫中的數據發生變化時,SqlDependency會自動觸發OnChange事件來通知應用程序,從而達到讓系統自動更新數據(或緩存)的目的。

  應用:數據實時性較高的場景、新聞、監控數據等。

  可以結合SignalR來實現web的實時數據更新。

2、使用方法:

  1)sql server設置:ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;語句讓相應的數據庫啟用監聽服務,以便支持SqlDependency特性。

  2)代碼:控制台項目,web項目推薦把start放在Application_start方法中。

  3)注意:查詢語句中不能使用*,表名要加[dbo].[xx]。sql語句要執行。

conn =ConfigurationManager.ConnectionStrings["default"].ToString();
                //Start和Stop方法
                SqlDependency.Start(conn);
                Update(conn);


 private static void Update(string conn)
        {
            using (
                   SqlConnection connection =
                       new SqlConnection(conn))
            {
                //此處 要注意 不能使用*  表名要加[dbo]  否則會出現一直調用執行 OnChange
                string sql = "select agent from [dbo].[info]";
                
                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    connection.Open();
                    command.CommandType=CommandType.Text;
                    dependency = new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
                    //必須要執行一下command
                    command.ExecuteNonQuery();
                    Console.WriteLine(dependency.HasChanges);
                }
            }
        }



        //update insert delete都會進入
        private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            Console.WriteLine("onchange方法中:"+dependency.HasChanges);
            Console.WriteLine("數據庫數據發生變化"+DateTime.Now);
            //這里要再次調用
            Update(conn);
        }

 


免責聲明!

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



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