手把手教Visual Studio IDE調(diào)試
Visual Studio有很多值得學習的地方,這里我們主要介紹Visual Studio IDE,包括介紹在ASP.NET程序中調(diào)試數(shù)據(jù)庫對象等方面。SQL Server 2000可以讓我們在查詢分析器中直接調(diào)試存儲過程(更多的信息請參看:用SQL Server 2000的查詢分析器調(diào)試存儲過程)到了現(xiàn)在的SQL Server 2005,這個功能被轉(zhuǎn)移到了SQL Servr Management Studio和Visual Studio IDE內(nèi)。 使用這個技術(shù),我們可以在Visual Studio中一步一步地調(diào)試存儲過程。而且你也可以在存儲過程中設(shè)置斷點,這樣當你調(diào)試你的程序時,這些斷點就會生效。
#t#SQL Server 2005的所有版本都支持調(diào)試功能(包括Express版)。 但是,只有Team Systems和Professional版本的Visual Studio才能在IDE內(nèi)調(diào)試存儲過程。 簡而言之,如果你使用的是Visual Web Developer或者Visual Studio Standard版本的話,就不能在調(diào)試應用程序的時候,一步一步地調(diào)試存儲過程或者進入到存儲過程內(nèi)部。
本文中,我將示例如何通過 Visual Studio IDE調(diào)試SQL Server 2005的存儲過程。我們既會看到如何在IDE中直接一步一步地調(diào)試存儲過程,也會看到如何給存儲過程設(shè)置斷點,并在調(diào)試應用程序的時候進入到斷點處。繼續(xù)往下看,你會知道得更多!
SQL Server調(diào)試的不同方法
現(xiàn)在的SQL Server 2005中,所有的數(shù)據(jù)庫調(diào)試都發(fā)生在Visual Studio IDE的內(nèi)部。數(shù)據(jù)庫中的像存儲過程、觸發(fā)器和用戶自定義函數(shù)(UDFs)這樣的對象都是可以被調(diào)試的(譯者注:本文中提到的數(shù)據(jù)庫對象指的是存儲過程、觸發(fā)器或用戶自定義函數(shù))。 Visual Studio提供了3種調(diào)試這些數(shù)據(jù)庫對象的方法。
◆數(shù)據(jù)庫中直接調(diào)試 – 在Visual Studio的服務器資源管理器中,右鍵單擊某個數(shù)據(jù)庫對象,然后選擇“單步執(zhí)行××”。 例如,當你右鍵單擊一個存儲過程的時候,彈出菜單中就會包含一個“單步執(zhí)行存儲過程”的選項。
◆應用程序調(diào)試 – 在數(shù)據(jù)庫對象內(nèi)設(shè)置斷點,然后通過應用程序進行調(diào)試。當相關(guān)的ASP.NET程序處于調(diào)試狀態(tài),并且調(diào)用了數(shù)據(jù)庫對象的時候,那么Visual Studio就會暫停在你所設(shè)置的斷點之處,從而允許我們一步一步地對T-SQL語句進行調(diào)試。
◆在SQL Server項目中調(diào)試 – 在Visual Studio中可以創(chuàng)建一個SQL Server項目。 該項目中可以包含T-SQL和數(shù)據(jù)庫對象,并且這些數(shù)據(jù)庫對象都可以通過SQL Server項目本身來調(diào)試。
關(guān)于這3種不同的SQL Server調(diào)試的更多信息,請參看:Overview of T-SQL and CLR Debugging in SQL Server 2005。
還有一個需要注意的地方就是,本文接下來所介紹的SQL Server調(diào)試是基于本地數(shù)據(jù)庫的。 當然,無論是本地數(shù)據(jù)庫還是遠程數(shù)據(jù)庫都是可以調(diào)試的。本地數(shù)據(jù)庫指的是數(shù)據(jù)庫部署在本機上;遠程數(shù)據(jù)庫指的是數(shù)據(jù)庫部署在本機之外的機器上。 調(diào)試本地數(shù)據(jù)庫不需要做額外的設(shè)置,但是調(diào)試遠程數(shù)據(jù)庫卻要復雜得多。
本文主要介紹的是如何在數(shù)據(jù)庫中直接調(diào)試,以及如何在ASP.NET程序中調(diào)試一個本地數(shù)據(jù)庫。詳細點說就是,我們將調(diào)試App_Data文件夾下的SQL Server 2005 Express版本的數(shù)據(jù)庫,你可以在本文的結(jié)尾處下載該數(shù)據(jù)庫及示例程序。 在今后的其它文章中我們再研究如何在SQL Server項目中調(diào)試數(shù)據(jù)庫。 接下來,我給大家簡要講一講關(guān)于調(diào)試遠程數(shù)據(jù)庫的相關(guān)要點。
調(diào)試遠程數(shù)據(jù)庫
調(diào)試遠程數(shù)據(jù)庫最關(guān)鍵的要點在于,要確保啟動Visual Studio的Windows用戶與連接遠程數(shù)據(jù)庫的用戶是同一個用戶。 此外,該用戶必須隸屬于sysadmin角色。
例如,你可以在Windows的域中創(chuàng)建一個名為“TestDebug”的用戶。 然后使其可以登錄到遠程SQL Server數(shù)據(jù)庫,并將該用戶添加到sysadmin角色內(nèi)。另外,你還需要使用“TestDebug”用戶來登錄你的電腦,或者確保使用runas.exe命令啟動的Visual Studio運行在“TestDebug”用戶下。 這樣,你就可以使用我們接下來演示的方法來調(diào)試了。
更多的詳細信息可以參看這本書:Hitchhiker's Guide to Visual Studio and SQL Server, Seventh Edition。
在數(shù)據(jù)庫中直接調(diào)試
在數(shù)據(jù)庫中直接調(diào)試是調(diào)試SQL Server 2005的存儲過程的最簡單的方法。 在Visual Stuido的IDE中你可以選擇單步執(zhí)行存儲過程,然后就可以一條語句一條語句地單步執(zhí)行了,同時你也可以檢查和修改存儲過程內(nèi)的T-SQL變量和參數(shù)。 本文結(jié)尾處提供下載的壓縮包中包括一個SQL Server 2005 Express版本的Northwind數(shù)據(jù)庫。我在其中添加了一個名為“DoThings”的存儲過程,它有一個參數(shù)@CategoryID。這是一個沒什么實用價值的存儲過程,但是它有很多的T-SQL語句和變量,另外還有一個參數(shù),這將使我們能更好地練習存儲過程的調(diào)試。
在ASP.NET程序中調(diào)試數(shù)據(jù)庫對象
數(shù)據(jù)庫中直接調(diào)試可以讓我們非常簡單地在Visual Studio IDE里直接調(diào)試存儲過程。 但是,有的時候我們需要在ASP.NET程序調(diào)用相關(guān)的存儲過程的時候再調(diào)試。 這樣,當某個數(shù)據(jù)庫對象被調(diào)用的時候,我們就可以對其進行調(diào)試。
這種調(diào)試方法整合到了應用程序的調(diào)試之中。 要使用它需要做如下幾步:
◆給你想要調(diào)試的數(shù)據(jù)庫對象添加斷點。 數(shù)據(jù)庫對象只有在包含斷點的情況下才會被調(diào)試。 例如,一般情況下,應用程序在調(diào)用存儲過程的時候,你是不能進入存儲過程內(nèi)部的, 如果你想調(diào)試存儲過程,那就必須要在存儲過程內(nèi)部設(shè)置斷點。
◆配置應用程序,使其可以調(diào)試SQL Server對象。 這個比較容易,你只要選中一個復選框即可。
◆禁用連接池。 連接池可以提高性能,它允許程序使用一個連接池中的某個空閑的連接來連接數(shù)據(jù)庫。 如果啟用它,就不能正確地調(diào)試了。因為默認情況下是啟用連接池的,所以我們必須在設(shè)置連接字符串的時候禁用它。 (當你完成了在ASP.NET程序中調(diào)試SQL Server對象的工作之后,一定要記得重新啟用連接池