Web重溫系列(三):OracleDependency實現監聽數據庫變化


       有個小項目(后來由另一個小組以Java開發了),內容是監控一個Oracle數據庫。如果其中一個表A有數據變動,則需要將相關內容重組后通過接口發送給B。

       通常的解決辦法是定時查詢,時間間隔可以小一點,還可以加上時間戳之類的,減少查詢量。在與經常訪問數據庫的同事聊的過程,發現通過監聽數據庫的變動也是一種可行方案,於是准備嘗試一下。

       查了一下,.Net對自己家SQL Server的監聽用的是SQLDependency類,而Oracle的相應實現則是OracleDependency類,這個應該是ODP.Net的一部分。

  操作流程如下:

  1. 安裝Oracle Developer Tools for Visual Studio

下載頁面時https://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html,下載前請確認自己的Visual Studio版本,我的2015;

  2. 在VS中創建項目,並利用NuGet包管理器安裝Oracle.ManagedDataAccess

  3. 完善配置文件(特別是連接串)

創建ADO.Net實體模型,選擇Oracle 數據庫 (ODP.NET, 托管驅動程序),然后選擇TN或者ET方式鏈接。果是ET方式,輸入服務器、端口、用戶名和密碼,創建成功后,連接字符串就自動設置好了;

  4. 創建命令並設置監聽如下

  其中Properties.Settings.Default.OracleDevConnStr是連接字符串名字

       OracleConnection con1 = new OracleConnection(Properties.Settings.Default.OracleDevConnStr);

            var sql = "select * from ZQ";
            OracleCommand cmd1 = new OracleCommand(sql, con1);

            con1.Open();

            cmd1.AddRowid = true;
            OracleDependency dep = new OracleDependency(cmd1);
            cmd1.Notification.IsNotifiedOnce = false;
            dep.OnChange += OnDbChange;

 

  5. 處理OnDbChange事件

    

      private void OnDbChange(object sender, OracleNotificationEventArgs eventArgs)
        {
            //TODO:...
        }

  此外,如果閱讀英文無障礙,可以查看如下鏈接https://www.oracle.com/webfolder/technetwork/tutorials/obe/db/hol08/dotnet/changenotification/odpnetchg_otn.htm

 


免責聲明!

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



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