逐步解說:偵錯延伸預存程序
更新:2007 年 11 月
這個主題適用於:
版本 |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express 版 |
||||
Standard 版 |
||||
Pro/Team 版 |
表格圖例:
套用 |
|
不套用 |
|
預設隱藏的命令。 |
警告: |
---|
已取代延伸預存程序。雖然在 ASP.NET 中仍然以回溯相容性 (Backward Compatibility) 繼續支援它們,但是在未來的發行版本中將要移除支援。 |
原本引進延伸預存程序是為了能夠執行在 T-SQL 中不能執行的動作,例如存取檔案系統、讀取登錄等。現在您可以撰寫 SQL CLR 程序來執行這些動作,再也不必撰寫延伸預存程序了。強烈建議您不要再撰寫新的「延伸預存程序」,並且考慮使用對等但更安全的 SQL CLR 預存程序取代現有的程序。
延伸預存程序是以 C++ 或 SQL 以外的其他任何語言撰寫的 DLL。因此,偵錯延伸預存程序非常類似偵錯以該語言所寫的任何 DLL。
警告: |
---|
「延伸預存程序」通常是使用原生 C++ 撰寫,缺少 Managed 程式碼所提供的保護。因為錯誤可能會損毀 SQL Server,所以應該小心測試這些程序。若要避免可能遺漏資料和其他問題,請不要在實際執行伺服器上偵錯延伸預存程序。如需詳細資訊,請參閱 ASP.NET 線上叢書。 |
您所看見的對話方塊與功能表命令可能會與 [說明] 中所描述的有所不同,視您所使用的設定或版本而定。若要變更設定,請在 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定。
若要偵錯延伸預存程序
以延伸預存程序 DLL 的偵錯組建啟動。您也需要一個應用程式,來呼叫要偵錯的延伸預存程序。如果目前還沒有應用程式,請執行下列其中一個動作:
使用資料庫的資料連接來建立 Visual Studio 資料庫專案,而此資料庫中包含延伸預存程序,以及呼叫延伸預存程序的程式碼。
建立可呼叫延伸預存程序的 SQL 指令碼檔。
-或-
使用一個像 ISQL/W (包含於 SQL Server) 或 ODBC Test (包含於 ODBC SDK) 的應用程式。
如果 SQL Server 目前正以服務方式執行,請開啟 [服務] 控制台,選取 [SQL Server],並按一下 [停止] 將它停止。
將 DLL 的偵錯版本複製到 sqlservr.exe 所在的目錄或搜尋路徑的任何目錄中。
-或-
設定建置後事件,以便複製 C++ 專案中的 DLL,如下所示:
開啟 [<專案> 屬性頁] 對話方塊。
在 [<專案> 屬性頁] 對話方塊中,開啟 [組態屬性] 資料夾。
在[組態屬性] 下,開啟 [建置事件] 資料夾。
選取 [建置後事件]。
在方格控制項中 [命令列] 的旁邊,輸入複製命令,例如下列範例:
Copy c:\MyProjects\MyXProc\debug\MyXProc.dll C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn
登錄延伸預存程序。
指定 SQL Server 做為延伸預存程序 DLL 的呼叫執行檔和工作目錄。修改 [<Project> 專案屬性] 對話方塊中的設定,您可在 [組態屬性] 的 [偵錯] 分類中存取這個對話方塊,如下所示:
如果 SQL Server 已安裝於預設位置,請在 [命令] 方塊內輸入 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn\SQLSERVR.EXE。
將 [工作目錄] 項目設定為 C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn。
將 [命令引數] 項目設為 -c。-c 選項會向 SQL Server 表示是從命令列啟動它,而且不是做為服務,讓 SQL Server 可以更快啟動。SQL Server 啟動後並不是做為服務,而是做為 Visual Studio 偵錯環境控制之下的主控台應用程式 (Console Application)。如此一來,就可以正確截獲和處理中斷點。
在延伸預存程序的原始程式碼內設定中斷點。
使用執行命令來啟動偵錯工作階段 (Session)。如需詳細資訊,請參閱執行控制項。
主控台視窗將在 SQL Server 啟動時出現。當文字捲動停止時,最後的訊息將告訴您:
啟動程序 'sp_sqlregister' 已啟動
SQL Server 將啟動並開始處理要求。
執行延伸預存程序。
當偵錯工具遇到包含中斷點的那一行時便會中斷。
如需如何編寫延伸預存程序的其他秘訣,請參閱 Microsoft 知識庫 (Knowledge Base) 的<SQL Server>章節,或 MSDN Library 的 SQL Server 文件中的<撰寫延伸預存程序>章節。