通過 Visual Studio 對 SQL Server 中的存儲過程設置斷點並進入存儲過程對其進行調試

      執行會在斷點處暫停,此時,我們可以查看並更改存儲過程的參數值,逐步地調試其各條語句,就像我們在步驟1 中所做的那樣。

在我們可以對應用程序調用的存儲過程進行調試之前,首先要指示ASP.NET web 應用程序與SQL Server 調試器相集成。首先,在 Solution Explorer 中右鍵單擊網站名稱(ASPNET_Data_Tutorial_74_VB) 。從關聯菜單中選擇 Property Pages 選項,然後選擇左側的Start Options 條目,選中 Debuggers 區域的 SQL Server 複選框(參見圖 3 )。

圖3 :在應用程序的 Property Pages 上選中 SQL Server 複選框

此外,我們還需要更新應用程序使用的數據庫連接字符串以禁用連接池。當某個數據庫連接關閉時,相應的SqlConnection 對象將被放入到一個包含可用連接的池中。當建立一個數據庫連接時,則可從這個池中檢索到一個可用的連接對象,而無需創建並建立一個新的連接。連接對象的這種緩衝池功能提高了性能,該功能缺省情況下是開啓的。但在調試時,我們要關閉連接池,其原因是,如果使用從該池中得到的連接,則不能正確重建調試的基礎架構。

爲了禁用連接池,更改Web.config 文件中的 NORTHWNDConnectionString ,使其包含 Pooling=false 設置。

 

注意: 通過 ASP.NET 應用程序完成SQL Server 調試後,請務必恢復連接池功能,方法是,刪除連接字符串中的Pooling 設置(或將其設置爲 Pooling=true )。

現在已完成 ASP.NET 應用程序配置,允許 Visual Studio 在 web 應用程序調用 SQL Server 數據庫對象時對數據庫對象進行調試。剩下的就是向存儲過程添加斷點並開始調試了!

步驟3:添加斷點並調試

打開Products_SelectByCategoryID 存儲過程,在 SELECT 語句的開頭設置一個斷點。方法是,單擊邊框處恰當位置或將光標移到SELECT 語句開始處並按下 F9 。如圖 4 所示,斷點顯示爲空白處的一個紅色圓圈。

圖4 :在 Products_SelectByCategoryID 存儲過程中設置斷點

爲了通過客戶端應用程序調試 SQL 數據庫對象,必須將該數據庫配置爲支持應用程序調試。第一次設置斷點時,此設置應會自動打開。但爲謹慎起見,最好對此覈實。在Server Explorer 中右鍵單擊 NORTHWND.MDF 節點。關聯菜單中的 Application Debugging 菜單項應處於選中狀態。

圖5 :確保 Application Debugging 選項已啓用

設置了斷點並啓用了 Application Debugging 選項後,就可以調試從 ASP.NET 應用程序調用的存儲過程了。啓動調試器:打開Debug 菜單並選擇 Start Debugging ,或者按下F5 ,或者單擊工具欄中的綠色 play 圖標。此時,調試器啓動,網站打開。

Products_SelectByCategoryID 存儲過程是在對強類型 DataSet的 TableAdapter使用現有存儲過程教程中創建的。其相應的 web 頁面 (~/AdvancedDAL/ExistingSprocs.aspx) 包含一個 GridView 控件,以顯示該存儲過程返回的結果。通過瀏覽器訪問該頁面。打開頁面後,Products_SelectByCategoryID 存儲過程中的斷點將被觸發,程序控制權返回給Visual Studio 。如步驟 1 一樣,您可以逐步調試存儲過程的各條語句、查看並更改參數值。

圖6 :ExistingSprocs.aspx 頁面最初顯示飲料類產品

圖7 :執行到存儲過程的斷點

在圖7 的Watch 窗口中可以看到,@CategoryID 參數的值爲 1 。這是由於 ExistingSprocs.aspx 頁面最初顯示飲料類產品,而該類產品的CategoryID 值爲 1 。從下拉列表中選擇另一個分類。這將導致一次回傳,並重新執行Products_SelectByCategoryID 存儲過程。斷點再次被觸發,但這次 @CategoryID 參數的值反映的是所選下拉列表項的 CategoryID 。

圖8 :從下拉列表中選擇另一個分類

圖9 :@CategoryID 參數反映 Web 頁面上選擇的分類

注意: 如果訪問 ExistingSprocs.aspx 頁面時沒有觸發 Products_SelectByCategoryID 存儲過程中的斷點,請確保 ASP.NET 應用程序的Properties Page 中 Debuggers 區域的SQL Server 複選框是選中的,連接池已禁用,並且數據庫的Application Debugging 選項是啓用的。如果還有問題,請重啓Visual Studio 後重試。

調試遠程實例中的T-SQL 數據庫對象

若SQL Server 數據庫實例與 Visual Studio 在同一臺機器上,則通過Visual Studio 調試數據庫對象相當簡單。但如果 SQL Server 與Visual Studio 位於不同的機器上,則需要進行仔細配置以使各方面工作正常。爲此我們的兩個重要任務是:

  • 確保通過 ADO.NET 連接到數據庫時使用的登錄帳戶具有 系統管理員 (sysadmin) 的身份。
  • 確保在開發機器上 Visual Studio 使用的 Windows 用戶帳戶是一個有效的、具有 sysadmin 身份的 SQL Server 登錄帳戶。

第一步相對簡單。首先,確定使用哪個用戶帳戶來從ASP.NET 應用程序連接到數據庫,然後通過SQL Server Management Studio 將此登錄帳戶添加到 sysadmin 角色中。

第二個任務要求您在調試應用程序時所使用的Windows 用戶帳戶是遠程數據庫上的一個有效的登錄帳戶。但有時您登錄到工作站的Windows 帳戶並非SQL Server 上的一個有效登錄帳戶。比起將您的特定登錄帳戶添加到SQL Server 來,一個更好的辦法是將某個Windows 用戶帳戶指定爲 SQL Server 調試帳戶。然後,可以使用該Windows 登錄帳戶的證書運行 Visual Studio ,以便調試遠程SQL Server 實例的數據庫對象。

下面用一個例子來說明上述情況。假設Windows 域中有一個名爲 SQLDebug 的Windows 帳戶。需要將此帳戶添加到遠程 SQL Server 實例中,使其作爲一個有效登錄帳戶及sysadmin 角色的一個成員。然後,我們需要以 SQLDebug 用戶身份運行 Visual Studio ,以便通過 Visual Studio 調試遠程 SQL Server 實例。這可以通過如下步驟完成:從工作站退出,用SQLDebug 帳戶重新登錄,然後啓動 Visual Studio 。但一個更簡單的方法是用我們自己的證書登錄工作站,然後使用runas.exe 作爲 SQLDebug 用戶啓動Visual Studio 。利用runas.exe ,可以借其他用戶帳戶的身份執行特定的應用程序。要作爲SQLDebug 用戶來啓動Visual Studio ,可以命令行輸入以下命令:

runas.exe /user:SQLDebug "%PROGRAMFILES%/Microsoft Visual Studio 8/Common7/IDE/devenv.exe"

關於該過程的更詳細的介紹,請參見 William R. Vaughn 的 Hitchhiker’s Guide to Visual Studio and SQL Server, Seventh Edition ,以及怎樣爲調試設置 SQL Server 權限

注意: 如果您的開發機器運行的是 Windows XP Service Pack 2 ,您將需要配置Internet Connection Firewall 以允許遠程調試。文章怎樣啓用 SQL Server 2005 調試 中提到這一過程包含兩個步驟:“(a) 在Visual Studio 宿主機器上,必須向 Exceptions 列表添加 Devenv.exe ,並打開 TCP 135 端口;(b) 在遠程 (SQL ) 機器上,必須打開TCP 135 端口並向 Exceptions 列表添加 sqlservr.exe 。如果您的域策略要求通過IPSec 進行網絡通信,則必須打開 UDP 4500 和 UDP 500 端口。

小結

除了支持 .NET 應用程序代碼的調試,Visual Studio 還爲 SQL Server 2005 提供了多種可選的調試方法。本教程中我們學習了其中兩種方法:直接數據庫調試和應用程序調試。要直接調試一個T-SQL 數據庫對象,先通過Server Explorer 找到該對象,右鍵單擊該對象,然後選擇"Step Into…" 。此時,調試器會啓動,並在該數據庫對象的第一條語句處暫停。這時您可以逐步調試該對象的各條語句,查看並更改參數值。在步驟1 中我們使用了這種方法來進入 Products_SelectByCategoryID 存儲過程進行調試。

應用程序調試允許直接在數據庫對象中設置斷點。當從客戶端應用程序(如一個ASP.NET web 應用程序)調用含有斷點的數據庫對象時,程序會暫停,調試器會接管程序的控制權。應用程序調試方法非常有用,原因是,它可以更清楚地展示對特定數據庫對象的調用是由哪個應用程序操作引起的。但是,比起直接數據庫調試方法,它需要進行較多的配置和設置。

我們還可通過 SQL Server Project 來對數據庫對象進行調試。我們將在下一篇教程中看到對SQL Server Project 的使用,該教程將會講述怎樣使用SQL Server Project 來創建並調試託管數據庫對象。

快樂編程!

--原地址

http://msdn.microsoft.com/en-us/dd263118(zh-cn).aspx

轉自:http://blog.csdn.net/xys_777/archive/2010/06/18/5678190.aspx

<connectionStrings>
    <add name="NORTHWNDConnectionString" connectionString=
        "Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/NORTHWND.MDF;
            Integrated Security=True;User Instance=True;Pooling=false"
        providerName="System.Data.SqlClient" />
</connectionStrings>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章