天天看點

[翻譯]在Visual Studio 2005中調試SQL Server 2005的存儲過程

<a href="http://aspnet.4guysfromrolla.com/code/DBDebugging.zip">[原文源碼下載下傳]</a>

[翻譯]在Visual Studio 2005中調試SQL Server 2005的存儲過程

原文釋出日期:2007.05.16

介紹

SQL Server 2005的所有版本都支援調試功能(包括Express版)。 但是,隻有Team Systems和Professional版本的Visual Studio才能在IDE内調試存儲過程。 簡而言之,如果你使用的是Visual Web Developer或者Visual Studio Standard版本的話,就不能在調試應用程式的時候,一步一步地調試存儲過程或者進入到存儲過程内部。 

本文中,我将示例如何通過Visual Studio IDE調試SQL Server 2005的存儲過程。 我們既會看到如何在IDE中直接一步一步地調試存儲過程,也會看到如何給存儲過程設定斷點,并在調試應用程式的時候進入到斷點處。 繼續往下看,你會知道得更多!

SQL Server調試的不同方法

現在的SQL Server 2005中,所有的資料庫調試都發生在Visual Studio IDE的内部。 資料庫中的像存儲過程、觸發器和使用者自定義函數(UDFs)這樣的對象都是可以被調試的(譯者注:本文中提到的資料庫對象指的是存儲過程、觸發器或使用者自定義函數)。 Visual Studio提供了3種調試這些資料庫對象的方法。 

    ·資料庫中直接調試 – 在Visual Studio的伺服器資料總管中,右鍵單擊某個資料庫對象,然後選擇“單步執行××”。 例如,當你右鍵單擊一個存儲過程的時候,彈出菜單中就會包含一個“單步執行存儲過程”的選項。 

    ·應用程式調試 – 在資料庫對象内設定斷點,然後通過應用程式進行調試。 當相關的ASP.NET程式處于調試狀态,并且調用了資料庫對象的時候,那麼Visual Studio就會暫停在你所設定的斷點之處,進而允許我們一步一步地對T-SQL語句進行調試。 

    ·在SQL Server項目中調試 – 在Visual Studio中可以建立一個SQL Server項目。 該項目中可以包含T-SQL和資料庫對象,并且這些資料庫對象都可以通過SQL Server項目本身來調試。

還有一個需要注意的地方就是,本文接下來所介紹的SQL Server調試是基于本地資料庫的。 當然,無論是本地資料庫還是遠端資料庫都是可以調試的。 本地資料庫指的是資料庫部署在本機上;遠端資料庫指的是資料庫部署在本機之外的機器上。 調試本地資料庫不需要做額外的設定, 但是調試遠端資料庫卻要複雜得多。

本文主要介紹的是如何在資料庫中直接調試,以及如何在ASP.NET程式中調試一個本地資料庫。 詳細點說就是,我們将調試App_Data檔案夾下的SQL Server 2005 Express版本的資料庫,你可以在本文的結尾處下載下傳該資料庫及示例程式。 在今後的其它文章中我們再研究如何在SQL Server項目中調試資料庫。 接下來,我給大家簡要講一講關于調試遠端資料庫的相關要點。 

調試遠端資料庫

調試遠端資料庫最關鍵的要點在于,要確定啟動Visual Studio的Windows使用者與連接配接遠端資料庫的使用者是同一個使用者。 此外,該使用者必須隸屬于sysadmin角色。

例如,你可以在Windows的域中建立一個名為“TestDebug”的使用者。 然後使其可以登入到遠端SQL Server資料庫,并将該使用者添加到sysadmin角色内。 另外,你還需要使用“TestDebug”使用者來登入你的電腦,或者確定使用runas.exe指令啟動的Visual Studio運作在“TestDebug”使用者下。 這樣,你就可以使用我們接下來示範的方法來調試了。 

在資料庫中直接調試

在資料庫中直接調試是調試SQL Server 2005的存儲過程的最簡單的方法。 在Visual Stuido的IDE中你可以選擇單步執行存儲過程,然後就可以一條語句一條語句地單步執行了,同時你也可以檢查和修改存儲過程内的T-SQL變量和參數。 本文結尾處提供下載下傳的壓縮包中包括一個SQL Server 2005 Express版本的Northwind資料庫。 我在其中添加了一個名為“DoThings”的存儲過程,它有一個參數@CategoryID。 這是一個沒什麼實用價值的存儲過程,但是它有很多的T-SQL語句和變量,另外還有一個參數,這将使我們能更好地練習存儲過程的調試。

在伺服器資料總管中右鍵單擊“DoThings”存儲過程,然後選擇單步執行存儲過程的選項。 (注意:SQL Server調試隻有Team Systems和Professional版本的Visual Studio才支援。) 

調試器啟動并且執行存儲過程。 因為存儲過程“DoThings”需要一個傳入值給@CategoryID,是以會彈出一個對話框讓我們提供該值。 輸入1後單擊OK。

首先會執行第一條語句。 你可以選擇逐語句或逐過程進行調試(快捷鍵分别為F11和F10),也可以在監視視窗中添加參數和變量。 存儲過程調試期間的截屏如下圖所示。 左側的黃色箭頭指的是目前執行的語句。 監視視窗中顯示的是@CategoryID和@AvgPrice的類型和值。 

存儲過程知行完後,結果會顯示在輸出視窗中。

你可以看到,在資料庫中直接調試存儲過程是非常簡單的,而且很好了解。 簡單到你隻需要在伺服器資料總管中,右鍵單擊存儲過程,然後選擇單步執行存儲過程即可。 

在ASP.NET程式中調試資料庫對象

資料庫中直接調試可以讓我們非常簡單地在Visual Studio IDE裡直接調試存儲過程。 但是,有的時候我們需要在ASP.NET程式調用相關的存儲過程的時候再調試。 這樣,當某個資料庫對象被調用的時候,我們就可以對其進行調試。 

這種調試方法整合到了應用程式的調試之中。 要使用它需要做如下幾步: 

    ·給你想要調試的資料庫對象添加斷點。 資料庫對象隻有在包含斷點的情況下才會被調試。 例如,一般情況下,應用程式在調用存儲過程的時候,你是不能進入存儲過程内部的, 如果你想調試存儲過程,那就必須要在存儲過程内部設定斷點。 

    ·配置應用程式,使其可以調試SQL Server對象。 這個比較容易,你隻要選中一個複選框即可。 

    ·禁用連接配接池。 連接配接池可以提高性能,它允許程式使用一個連接配接池中的某個空閑的連接配接來連接配接資料庫。 如果啟用它,就不能正确地調試了。 因為預設情況下是啟用連接配接池的,是以我們必須在設定連接配接字元串的時候禁用它。 (當你完成了在ASP.NET程式中調試SQL Server對象的工作之後,一定要記得重新啟用連接配接池)

接下來讓我們來看一看這幾個步驟具體該如何做。 

首先,在Visual Studio中打開“DoThings”存儲過程,然後在“DECLARE @AvgPrice money”這句上設定斷點。 這樣第一步就完成了,接下來做第二步。

配置ASP.NET程式,以使其支援SQL Server的調試。右鍵單擊項目,然後選擇屬性。 此時将會彈出一個如下圖所示的對話框。 選擇啟動選項,然後在“調試器”部分中選中“SQL Server”複選框。 這樣就完成前兩步了,還差最後一步。 

最後一步,我們需要修改連接配接字元串,使其禁用連接配接池。 這個任務相當簡單,你隻要在你的連接配接字元串後加一個屬性“Pooling=false”即可。 假設你将連接配接字元串資訊定義在了Web.config的&lt;connectionString&gt;節點裡,那麼修改後的連接配接字元串如下所示:

&lt;connectionStrings&gt; 

        &lt;add name="NorthwindConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;Integrated Security=True;User Instance=True; Pooling=false" providerName="System.Data.SqlClient"/&gt; 

&lt;/connectionStrings&gt;

現在,我們已經完成了這3個步驟。 為了示範如何調試,我們來建立一個調用“DoThings”存儲過程的ASP.NET頁。 本文結尾處你下載下傳的Demo中就包含有這個頁面。 當你調試ASP.NET程式并且通路了這個頁的時候,程式就會暫停在存儲過程中設定了斷點的地方。 然後,你就可以單步執行存儲過程,并且可以在監視視窗中檢視和修改參數和變量的值,就像在資料庫中直接調試存儲過程一樣。 

結論

在SQL Server之前的版本中有一套用于調試存儲過程的獨立工具。 到了現在的SQL Server 2005,存儲過程、觸發器和使用者自定義函數(UDFs)都是通過Visual Studio Team System和Professional版本來調試的。 它給我們帶來了3種調試SQL Server的方法: 資料庫中直接調試、應用程式調試和在SQL Server項目中調試。 本文中,我們一起研究了前兩種調試方法(使用本地資料庫)。 

     本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/345644,如需轉載請自行聯系原作者