Share via


HOW TO:偵錯 SQL CLR 預存程序

這個主題適用於:

版本

Visual Basic

C#

C++

Web Developer

Express

標題不適用於 標題不適用於 標題不適用於 標題不適用於

Visual Studio Professional、Visual Studio Premium 和 Visual Studio Ultimate

標題適用於 標題適用於 標題適用於 標題適用於

您可以使用直接資料庫偵錯對現有的 SQL Server Common Language Run-time (SQL CLR) 預存程序進行偵錯,方法與偵錯 Transact-SQL 程序相同。 不過,這不能如果您需要創建或修改 SQL CLR 過程,因為您需要編譯和部署它。這些步驟,不存在為Transact-SQL過程。 在這種情況下,需要在 Visual Studio 中建立 SQL Server 專案。

下列工作會在 AdventureWorks 資料庫 (隨 SQL Server 2005 安裝的資料庫之一) 中建立新的 SQL CLR 預存程序,然後示範如何進行偵錯。 您將會建立加入新的貨幣至 Sales.Currency 資料表的預存程序。

這個範例著重於在 SQL Server 專案中進行偵錯。 一旦建立了預存程序,您就可以使用直接資料庫偵錯對它進行偵錯。 如需詳細資訊,請參閱How to: Step into an Object Using Server Explorer

注意事項注意事項

根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。 若要變更設定,請從 [工具] 功能表中選取 [匯入和匯出設定]。 如需詳細資訊,請參閱使用設定

如果在嘗試偵錯 SQL CLR 物件時出現「已由使用者取消」訊息,您必須手動設定正在執行 Visual Studio 的電腦以及正在執行 SQL Server 的電腦。 如需詳細資訊,請參閱HOW TO:設定您的電腦以啟用 Transact-SQL 和 SQL CLR 偵錯

若要偵錯 SQL CLR 預存程序

  1. 啟用遠端偵錯。 如需詳細資訊,請參閱HOW TO:設定遠端偵錯

  2. 在新的 SQL Server 專案中,建立與 [AdventureWorks] 範例資料庫的連接。 如需詳細資訊,請參閱How to: Connect to a Database

  3. 使用下列第一個範例區段的程式碼建立新的預存程序,並將其命名為 InsertCurrency.cs。 如需詳細資訊,請參閱How to: Develop with the SQL Server Project Type

  4. 加入藉由呼叫測試預存程序的指令碼。 在 [方案總管] 中,以滑鼠右鍵按一下 [TestScripts] 目錄,再按 [加入測試指令碼],然後插入下列第二個範例區段中的程式碼。 使用 InsertCurrency.sql 名稱儲存檔案。 以滑鼠右鍵按一下這個檔案名稱,再按 [設定為預設偵錯指令碼]。

  5. 在 InsertCurrency.cs 中設定中斷點,然後在 [偵錯] 功能表上按一下 [啟動],對專案進行編譯、部署和單元測試。 當中斷點上出現以黃色箭頭表示的指令指標時,即表示您正在偵錯預存程序。

  6. 嘗試不同的偵錯功能。

    1. 開啟 [區域變數] 視窗,在 [偵錯] 功能表上按一下 [逐步執行],逐步執行預存程序的某一行。 請注意變數 @mynvarchar 的值已在 [區域變數] 視窗中有所變更,並且其值現在以紅色顯示,代表它已變更。 如需詳細資訊,請參閱使用區域變數視窗

      注意事項注意事項

      伺服器可能不會反映偵錯工具視窗內的變數值變更。 如需詳細資訊,請參閱 SQL 偵錯限制

    2. 開啟 [監看式] 視窗。 在 [文字編輯器] 中,將 InsertCurrencyCommand 變數拖曳至 [監看式] 視窗中的任何位置。

      該變數現在將加入被監看變數的清單內。 如需詳細資訊,請參閱HOW TO:使用偵錯工具變數視窗

      注意:您也可在 [監看式] 視窗內編輯變數的值。

    3. 在 [文字編輯器] 中,以滑鼠右鍵按一下 InsertCurrencyCommand.ExecuteNonQuery 那一行,並在捷徑功能表中按一下 [插入中斷點]。

    4. 在 [偵錯] 功能表中按一下 [繼續],偵錯工具將會在新的中斷點之前,執行程式碼。

  7. 再按一下 [繼續],以完成預存程序的偵錯。

    [輸出] 視窗會顯示訊息,說明已成功部署預存程序,並且顯示在 InsertCurrency.sql 檔案中執行命令的結果。

範例

使用下列程式碼取代預存程序範本。

using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlServer;
using System.Data.SqlTypes;

public partial class StoredProcedures
{
    [SqlProcedure]
    public static void InsertCurrency(SqlString currencyCode, 
                                               SqlString name)
    {
        using(SqlConnection conn = new SqlConnection("context connection=true")) {
        SqlCommand cmd = new SqlCommand([your SQL statement], conn);
        }
        InsertCurrencyCommand.CommandText = "insert Sales.Currency"
                     + " (CurrencyCode, Name, ModifiedDate) values('" 
                     + currencyCode.ToString() + "', '" 
                     + name.ToString() + "', '" 
                     + DateTime.Now.ToString() + "')";
        InsertCurrencyCommand.ExecuteNonQuery();
    }
}

這是用來執行預存程序的測試指令碼。

- Delete any row that might exist with a key value
- that matches the one we are going to insert
DELETE Sales.Currency
WHERE CurrencyCode = 'eee'
EXEC InsertCurrency 'eee', 'MyCurr4'
SELECT * FROM Sales.Currency WHERE CurrencyCode = 'eee'

請參閱

工作

HOW TO:使用 Common Language Run-time 整合建立和執行 SQL Server 預存程序

其他資源

HOW TO:設定您的電腦以啟用 Transact-SQL 和 SQL CLR 偵錯