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

原文地址:http://aspnet.4guysfromrolla.com/articles/051607-1.aspx
[原文源碼下載]


在Visual Studio 2005中調試SQL Server 2005的存儲過程

原文發佈日期:2007.05.16
作者:Scott Mitchell
翻譯:webabcd


介紹
SQL Server 2000可以讓我們在查詢分析器中直接調試存儲過程(更多的信息請參看:用SQL Server 2000的查詢分析器調試存儲過程) 到了現在的SQL Server 2005,這個功能被轉移到了SQL Servr Management Studio和Visual Studio IDE內。 使用這個技術,我們可以在Visual Studio中一步一步地調試存儲過程。 而且你也可以在存儲過程中設置斷點,這樣當你調試你的程序時,這些斷點就會生效。

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項目本身來調試。

關於這3種不同的SQL Server調試的更多信息,請參看:Overview of T-SQL and CLR Debugging in SQL Server 2005

還有一個需要注意的地方就是,本文接下來所介紹的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”用戶下。 這樣,你就可以使用我們接下來演示的方法來調試了。

更多的詳細信息可以參看這本書:Hitchhiker's Guide to Visual Studio and SQL Server, Seventh Edition


在數據庫中直接調試
在數據庫中直接調試是調試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的<connectionString>節點裏,那麼修改後的連接字符串如下所示:
<connectionStrings>
    
<add name="NorthwindConnectionString" connectionString="Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/NORTHWND.MDF;Integrated Security=True;User Instance=True; Pooling=false" providerName="System.Data.SqlClient"/>
</connectionStrings> 

現在,我們已經完成了這3個步驟。 爲了演示如何調試,我們來創建一個調用“DoThings”存儲過程的ASP.NET頁。 本文結尾處你下載的Demo中就包含有這個頁面。 當你調試ASP.NET程序並且訪問了這個頁的時候,程序就會暫停在存儲過程中設置了斷點的地方。 然後,你就可以單步執行存儲過程,並且可以在監視窗口中查看和修改參數和變量的值,就像在數據庫中直接調試存儲過程一樣。



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

祝編程愉快! 
 
以上內容轉貼自webabcd,在此向webabcd表示感謝!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章