<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blog.Toby

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks
    作者  Balamurali Balaji MVP
    注意:這篇文章是由無人工介入的自動的機器翻譯系統翻譯完成。這些文章是微軟為不懂英語的用戶提供的, 以使他們能夠理解這些文章的內容。微軟不保證機器翻譯的正確度,也不對由于內容的誤譯或者客戶對它的使用所引起的任何直接的, 或間接的可能的問題負責。
    文章編號 : 555893
    最后修改 : 2007年3月27日
    修訂 : 1.0

    概要

    本文解釋如何在 C# 窗口應用程序中實現 SQL SERVER 2005 查詢通知服務。 本文中提供示例代碼與 Visual Studio 2005 和 SQL Server Management Studio 2005。

    回到頂端

    癥狀

    簡介

    查詢通知是功能允許應用程序要數據已更改時通知 Microsoft SQL Server 2005 中。 它主要用于存儲數據庫中數據的緩存并獲取刷新并通知客戶應用 everytime 中數據庫中數據更改應用程序。

    ASP.NET 2.0 中開發已經熟悉自己 Web 應用程序以 SQL 數據緩沖區中 < A0 > SqlCacheDependency < / A0 > 類使用。 如由 System.Data.SqlClient 命名空間中 SqlDependency 類提供本文處理高級實現。 它提供之間窗口應用程序和 SQLServer, 使您可以使用相關性來檢測服務器中更改簡單和一流通知功能。 它有效地利用 SQL Server 2005 通知功能對托管客戶應用程序使用 ADO.NET。

    SQL Server 2005 使 ADO.NET Windows 應用程序可以向 SQLServer 發送命令, 請求生成通知如果執行同一 SQL 命令將生成結果集與最初檢索不同。 查詢通知是受數據庫 Service Broker 事件和隊列機制。

    回到頂端

    原因

    中實現查詢通知 step-By-Step 方法 的整個過程是接收請求通知進程之間客戶窗口應用程序和 SQL Server 2005 是五個小步驟中完成如下:

    1) 數據庫是問題必須配置為啟用查詢通知服務。

    出于安全原因, SQL Server 2005 數據庫沒有默認啟用 ServiceBroker。 要啟用查詢通知對數據庫, SQL SERVER 2005 MAnagement VisualStudio, 查詢窗口, 中運行以下命令:

    ALTER DATABASE SET ENABLE_BROKER;

    我在本文, 使用 AdvtDB 名

    ALTER DATABASE AdvtDB SET ENABLE_BROKER;

    2) 用戶必須具有正確客戶和服務器端權限來請求并接收通知。
    誰執行請求通知必須具有 SUBSCRIBEQUERYNOTIFICATIONS 數據庫權限對端 server.Client - 代碼部分信任情況中運行命令用戶要求 SqlClientPermission。



    專用 bool EnoughPermission()
    {
            
    SqlClientPermission perm = 新 SqlClientPermission.System.Security.permissions.PermissionState.unrestricted;)
       嘗試
       {
           perm.demand();
           返回 true ;
       } 
       catch (System.Exception)
       {
           返回 false ;
       }
    }

    3) 使用 SqlCommand 對象來執行與一個關聯通知 objectùSqlDependency 有效 SELECT 語句。


    SqlDependency 對象 : 查詢通知 API 提供 SqlDependency 對象來處理通知。 使用 SqlDependency, ServiceBroker 對象, 例如通知隊列, 預定義。 它與它們發布到隊列自動啟動輔助線程以處理通知 ; 它還分析 ServiceBroker 消息, 公開信息作為事件參數數據。 必須通過調用開始方法來建立相關性到數據庫初始化 SqlDependency。 這是靜態方法需要為每個數據庫連接需要應用初始化期間調用一次。 對于每個依賴連接進行應用程序終止上應調用 Stop 方法。

    建立數據庫連接、 SqlDependency 收聽通知服務已啟動并 DataGridView 控件顯示與當前結果返回由命令對象執行查詢 Click 的按鈕, 上。


            專用 void button1_Click(object sender, EventArgs e)
            {

                / / 刪除任何現有相關性連接, 然后創建一個新的。
                connstr = 數據源 " IntegratedSecurity; 初始目錄 " = localhost; = SSPI ; = AdvtDB;
                字符串 ssql = 選擇 " 從 advt; * "

                SqlDependency.Stop(connstr);
                SqlDependency.start(connstr);
                如果 () 連接 = = null
                    連接 = 新 SqlConnection(connstr);
                如果 () 命令 = = null
                    命令 = 新 SqlCommand ssql, 連接);
                如果 () myDataSet = = null
                    myDataSet = 新 DataSet();
                GetAdvtData();
            }

    GetAdvtData() 是 Helper 函數創建命令對象實例, 將其與 SqlDependency 對象關聯。 注意 SqlDependency 對象有 OnChange 事件通知客戶數據庫中已進行更改并將負責其 eventhandler dependency_OnChange 的接收部分的通知。

            專用 void GetAdvtData()
            {
                myDataSet.clear();
                / / 確保命令對象沒有通知對象。
                command.Notification = null;
                / / 創建并綁定到命令對象 SqlDependency 對象。
                SqlDependency 相關性 = 新 SqlDependency(command);
                dependency.OnChange += 新 OnChangeEventHandler(dependency_OnChange);

                使用 (SqlDataAdapter 適配器 = 新 SqlDataAdapter(command))
                {
                    adapter.Fill (myDataSet, " Advt ");
                    dataGridView1.DataSource = myDataSet;
                    dataGridView1.DataMember = " advt ";
                }
            }

    4) 提供代碼以處理通知時而且被監視數據更改。

    輔助線程進程封裝 OnChange 事件處理程序并且因此, UI changes(updating the datagrid, displaying the status message) 位于主線程不可能訪問此處。 創建另一個委托線程 UIDelegate 執行這些任務并讓
    從 OnChange 事件的 SqlDependency 對象刪除輔助線程只處理程序。

           委派 void UIDelegate();
           專用 void dependency_OnChange (object sender, SqlNotificationEventArgs e)
            {
                UIDelegate uidel = 新 UIDelegate(RefreshData);
                This.invoke (uidel, null);

                //Remove 情形處理程序用于將一個通知。
                SqlDependency 相關性 = (SqlDependency) 發送者;
                dependency.OnChange -= dependency_OnChange;
            }
            專用 void RefreshData()
            {
                / / 由于, UI 線程上執行代碼可以安全地更新 UI。

                label1.Text = " 數據庫有一些更改和網格中應用 ";

                / / 加載數據集綁定到網格。
                GetAdvtData();
            }

    5) 停止 SqlDependency NotificationServices 退出 application.In form_closing 事件時, 包含用于停止 SqlDepenency 通知偵聽器服務代碼。


            專用 void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                SqlDependency.Stop(connstr);
                如果 () 連接 = null !
                    Connection.Close();
            }

    下面是聲明該程序中使用。

            專用 const 字符串 statusMessage; 
            專用 DataSet myDataSet = null;
            專用 SqlConnection 連接 = null;
            專用 SqlCommand 命令 = null;
            私有字符串 connstr;



    回到頂端

    解決方案

    測試應用程序
    運行剛剛按照上述步驟創建 VisualC # Windows 應用程序。 當窗體顯示, "-單擊該按鈕并注意 datagridview 控件被填充。

    現在, 打開查詢窗口是 SQL Server Management 畫室式, 和插入行或更新關注表中列。 切換回您運行應用程序, C# 時可能看到數據網格視圖中出現更改。
    posted on 2007-08-15 10:08 渠上月 閱讀(1866) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
    主站蜘蛛池模板: 亚洲一级免费视频| 久久夜色精品国产噜噜噜亚洲AV| 亚洲乱码在线卡一卡二卡新区| 亚洲一区视频在线播放| 久久无码av亚洲精品色午夜| 午夜视频免费成人| 亚洲国产无线乱码在线观看| 在线免费观看韩国a视频| 久久精品夜色国产亚洲av| 国产在线播放线91免费| 国产AV无码专区亚洲Av| 无码国产精品一区二区免费vr| 国产午夜无码视频免费网站| 337p日本欧洲亚洲大胆精品555588| 午夜无码A级毛片免费视频| 亚洲精品美女视频| 30岁的女人韩剧免费观看| 国产亚洲情侣一区二区无码AV| 国产精品永久免费| 亚洲国产国产综合一区首页| 24小时日本韩国高清免费| 在线亚洲高清揄拍自拍一品区| 午夜视频免费成人| 国产一级a毛一级a看免费人娇| 婷婷亚洲久悠悠色悠在线播放 | 一级美国片免费看| 亚洲人成网77777色在线播放| 99久久国产免费中文无字幕| 亚洲无mate20pro麻豆| 免费很黄很色裸乳在线观看| 久久精品无码专区免费| 亚洲噜噜噜噜噜影院在线播放| 热久久精品免费视频| 国产一区二区三区免费观在线| 亚洲经典在线观看| 免费国产a国产片高清| 久久久久久久99精品免费观看| 亚洲资源最新版在线观看| 国产成人99久久亚洲综合精品| 7m凹凸精品分类大全免费| 精品一区二区三区免费毛片|