在VB.NET中調試預存程序

來源:互聯網
上載者:User
預存程序 調試是編寫應用程式的一個主要部分。Visual Studio .NET為內建的調試器提供了大量的增強效能,包括統一的調試介面、Web service調試以及跨語言調試。這種調試器的一個最有用的新功能體現在對預存程序的調試效能上。本文我將介紹在VS.NET中對SQL Server 2000預存程序進行調試的幾種可選方法,以及你可能會遇到的一些配置問題。

許多商家使用SQL Server作為資料庫,並將預存程序作為將資料返回VB中的機制,因此對預存程序進行逐步調試的能力成為開發的關鍵。Visual Basic 6中提供了Transact-SQL (T-SQL)調試,它但需要許多步驟來完成對調試過程的配置。另外,這種調試器是一個單獨的程式,而且也不象VB調試器那麼功能完備。VB.NET提供了對預存程序的調試,雖然用於遠端偵錯的設定還需要一些額外的工作,但這種調試器同你用在VB代碼中使用的一樣。除了VB.NET和SQL Server 2000以外,你還可以使用其他版本的VB和SQL Server來調試預存程序。然而在OS、VB和SQL Server中可能會存在很多種配置,而且它們每一種都有其自身的配置問題,因此這裡我將著重對SQL Server 2000和VB.NET進行講解。

所有必需的檔案都要被放在合適的位置上以便對預存程序進行調試(在表1中可以看到一列包含調試方法及其位置的檔案)。如果你的機器中裝了SQL Server ,那麼在這個機器中調試預存程序就應該不會出現什麼配置問題。你必須保證伺服器和用戶端的配置都是正確的,以便對預存程序進行遠端偵錯,而且你必須在伺服器中安裝調試組件以保證遠端偵錯的正確運行。

你可以使用三種方法來設定調試組件:可以在伺服器中安裝VS.NET;可以運行VS.NET安裝程式並選擇Remote Components Setup,它只用於安裝你需要進行調試的檔案;或者你可以手動複製和記錄那些必需的檔案。如果你不選擇在伺服器中完整安裝一個VS.NET,那麼Remote Components Setup會以一個連結的形式出現在安裝VS.NET的第一個顯示畫面中(請查閱資源以瞭解更多遠端偵錯的設定問題)。

安裝好遠端偵錯組件之後,VS.NET會對MSSDI98.dll檔案進行升級,但不會將它複製到SQL Server \binn 目錄下,你需要手動進行複製。想要對T-SQL進行調試的使用者還需要在伺服器端的sp_sdidebug上設定EXECUTE許可權。這是一個位於master 資料庫中的一個擴充預存程序,在預設狀態下只有系統管理員有EXECUTE許可權來訪問這個預存程序。如果適當地設定這些許可權,使用者就能夠在該伺服器的任何資料庫中對預存程序進行調試了。如果調試器在無誤時中斷或者在逐步調試時出現問題,則需要檢查交易記錄中的Application Errors。

用SQL Explorer進行調試
SQL Explorer是VS.NET的一部分,它用於串連和運用資料庫。要直接從SQL Explorer中調試預存程序,首先你要和資料庫建立資料連線。開啟SQL Explorer並選中Data Connections來串連Northwind資料庫。右擊並選中Add Connection,在Data Link屬性視窗中輸入SQL Server的伺服器名以及註冊資訊,並選中Northwind作為預設資料庫。

建立好資料庫連接之後,你需要展開SQL Server並尋找到Sales By Year預存程序。展開該預存程序後你會發現它使用了兩個參數:@Beginning_Date和@Ending_Date。參數下方的四項是由該預存程序返回的列。

右擊該預存程序並選中Step Into Stored Procedure選項,此時會出現一個Run Stored Procedure對話方塊,它會提示你輸入兩個日期,因為該過程是包含參數的 。這個畫面的好處在於它會告訴你每個參數的資料類型,以及它是輸入參數型還是輸出型參數。輸入1/1/96 和1/1/97兩個值。

在預存程序第一行的左頁邊上會出現一個黃色的箭頭,這就說明現在處於調試狀態。從這一點來看,調試預存程序和調試VB代碼是一樣的。你可以使用標準的VB調試鍵來對代碼進行逐步調試或者繼續運行。和在VB代碼中一樣,你可以使用書籤以及設定斷點。

Locals視窗用於顯示任何本地變數的值(在這裡指@Beginning_Date和@Ending_Date)。你還可以在Command視窗中檢查變數的值。通過選中Debug | Windows找到VS.NET中的調試視窗。如果一個預存程序執行無誤的話Output視窗中會出現這個訊息:“The program 'SQL Debugger: T-SQL' has exited with code 0 (0x0)。”通過在Output視窗頂端的combo box中選中Database Output,你可以看到預存程序中SELECT語句的執行結果。

一個觸發器(trigger)是在執行INSERT、UPDATE或DELETE語句時觸發的SQL代碼,由於觸發器屬於T-SQL代碼,因此你可以對它們進行調試,但你不能單獨調試它們,而必須對那些引發觸發器的預存程序進行調試,然後再逐步調試觸發器。你可以在Call Stack視窗中找到觸發器和預存程序。

你還可以通過對調用它的預存程序進行逐步調試來調試一個使用者定義的函數(UDF)。只要預存程序調用了該函數,調試器便會逐步對它進行調試。你會在Call Stack視窗中找到這個預存程序以及UDF。旁邊帶有黃色箭頭的預存程序表示當前代碼處於調試狀態。比如,你可以建立這樣一個預存程序,使用一個EmployeeID並返回職員姓名和一個以逗號分割開的職員分布地區的字串(見列表A)。用SELECT語句調用ufn_GetEmployeeRegionString來返回該地區。只要執行這個SELECT語句,調試器便會開始調試UDF代碼。你可以在Call Stack視窗中找到該預存程序和函數。

從你的代碼中調試SQL
想要調試從VB程式中調用的預存程序,你可以在SQL Explorer中開啟該預存程序並在其中設定一個斷點。只要程式運行到設定斷點的地方,調試器便開始對它進行調試。這對一個使用了大量參數的預存程序來說非常有用,因為這樣避免了手動輸入每個參數。

通過使用調用usp_GetEmployee 預存程序的Debug範常式序來逐步進行調試。比如,你可以查看範常式序中Display Regions按鈕的代碼(見列表1以及下載範常式序)。當該命令的ExecuteReader方法被調用時,你便可以開始逐步調試被調用的預存程序了。

點擊Solution Explorer中的項目,開始對代碼進行調試。選中Project | Properties,展開Configuration Properties檔案夾並點擊Debugging。查看畫面底部的“SQL Server debugging”checkbox。

進入SQL Explorer,查看Northwind資料庫中的usp_GetEmployee,雙擊進入編輯模式。在SET NOCOUNT ON一行設定斷點。在調用ExecuteReader方法之後你還需要在VB代碼中的這一行設定一個斷點。它會顯示“Do While dr.Read。”在這裡你需要設定斷點,因為調試器不會返回到調用該預存程序的VB代碼中進行逐步調試;它會繼續執行。運行這個應用程式,輸入EmployeeID並點擊Display Regions按鈕。調試器會在預存程序中的第一個斷點處停下來。

雖然使用了相同的VS.NET調試器,但是它在調試預存程序時還是有一些限制。比如,你無法在SQL語句當中終止執行。而且,它不能編輯和繼續執行。如果你使用了PRINT語句,那麼輸出結果將不會出現在任何調試器視窗中。另外,如果SQL Server已經對原先的值進行了緩衝,那麼在調試器中變數的改變則可能無法在T-SQL代碼中反映出來。

如你所看到的,VS.NET不僅提供了T-SQL調試功能,而且還提供了一個用於所有代碼的單一調試介面。遺憾的是,運行遠端偵錯需要進行大量的配置和測試工作。然而不管怎樣,對預存程序進行調試的益處是完全值得你這麼做的。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。