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

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

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

    blog.Toby

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

    概要

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

    回到頂端

    癥狀

    簡介

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

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

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

    回到頂端

    原因

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

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

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

    ALTER DATABASE SET ENABLE_BROKER;

    我在本文, 使用 AdvtDB 名

    ALTER DATABASE AdvtDB SET ENABLE_BROKER;

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



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

    3) 使用 SqlCommand 對象來執(zhí)行與一個關(guān)聯(lián)通知 objectùSqlDependency 有效 SELECT 語句。


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

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


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

                / / 刪除任何現(xiàn)有相關(guān)性連接, 然后創(chuàng)建一個新的。
                connstr = 數(shù)據(jù)源 " 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 函數(shù)創(chuàng)建命令對象實例, 將其與 SqlDependency 對象關(guān)聯(lián)。 注意 SqlDependency 對象有 OnChange 事件通知客戶數(shù)據(jù)庫中已進行更改并將負責(zé)其 eventhandler dependency_OnChange 的接收部分的通知。

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

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

    4) 提供代碼以處理通知時而且被監(jiān)視數(shù)據(jù)更改。

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

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

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

                label1.Text = " 數(shù)據(jù)庫有一些更改和網(wǎng)格中應(yīng)用 ";

                / / 加載數(shù)據(jù)集綁定到網(wǎng)格。
                GetAdvtData();
            }

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


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

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

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



    回到頂端

    解決方案

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

    現(xiàn)在, 打開查詢窗口是 SQL Server Management 畫室式, 和插入行或更新關(guān)注表中列。 切換回您運行應(yīng)用程序, C# 時可能看到數(shù)據(jù)網(wǎng)格視圖中出現(xiàn)更改。
    posted on 2007-08-15 10:08 渠上月 閱讀(1865) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
    主站蜘蛛池模板: 亚洲乱码日产精品a级毛片久久| 成人激情免费视频| 免费国产a国产片高清| 亚洲国产成a人v在线观看| 99久久99这里只有免费费精品| 久久久久亚洲AV无码观看| 日本在线看片免费人成视频1000| 亚洲成AV人在线观看天堂无码| 女同免费毛片在线播放| 亚洲精品白浆高清久久久久久| 免费黄网站在线观看| 久久精品7亚洲午夜a| 久久午夜免费鲁丝片| 久久亚洲精品无码VA大香大香| aⅴ在线免费观看| 亚洲一区在线视频观看| 在线精品免费视频| 美女裸体无遮挡免费视频网站| 美腿丝袜亚洲综合| 未满十八18禁止免费无码网站| 亚洲日产2021三区在线 | a级成人毛片免费图片| 亚洲AV无码日韩AV无码导航| 最近中文字幕mv免费高清在线| 亚洲制服丝袜在线播放| 成人永久免费高清| 中国一级特黄高清免费的大片中国一级黄色片 | 亚洲精品无码久久久影院相关影片 | 国产成人高清精品免费软件 | 亚洲综合成人婷婷五月网址| 亚洲AV无码日韩AV无码导航| 亚洲精品97久久中文字幕无码| 亚洲一级毛片免费观看| 日韩成人在线免费视频| jizz免费观看| 亚洲视频免费一区| gogo全球高清大胆亚洲| 99视频在线精品免费| 鲁死你资源站亚洲av| 国产精品亚洲片在线观看不卡| 国产一卡2卡3卡4卡无卡免费视频|