Transact-SQL 資料庫偵錯限制
這個主題適用於:
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
以 Visual Studio 偵錯器及開頭為 SQL Server 2005 的 SQL Server 進行偵錯 Transact-SQL 時,需考慮許多一般限制。如需以 SQL Server Management Studio 偵錯 Transact-SQL 的詳細資訊,請參閱使用 Transact-SQL 偵錯器 (英文)。
多層 SQL 偵錯
偵錯多層應用程式時,您無法使用 [逐步執行],從應用程式層 (C#、Visual Basic 或 C++) 中的程式碼逐步執行至 SQL Server (Transact-SQL 或 SQL/CLR) 執行個體的程式碼。反之,您需在預存程序程式碼中設定中斷點,然後按 [繼續] (F5),一直執行程式碼到中斷點為止。您也可以使用 [執行至游標處] 來到達所需的點,而不使用中斷點。請注意,在 SQL Server 層中,您可以在 Transact-SQL 和 SQL/CLR 程式碼之間來回逐步執行。
您亦無法反向逐步執行,也就是從預存程式程式碼反向執行至位於呼叫預存程序之層的程式碼。如果要在返回應用程式層之後繼續偵錯,在應用程式程式碼中,請於呼叫預存程序的點之後設定一個中斷點。
連接共用是提升效能的技巧。當應用程式關閉其資料連接時,SQL Server 連接不會完全關閉,而會保存在共用中,稍後若應用程式持續嘗試重新開啟連結時即可使用。不過,透過連接共用建立連接時,就無法重新啟用 Transact-SQL 偵錯。
偵錯時需暫時停用連接共用功能。若要停用連接共用,請在連接至 SQL Server 執行個體的連接字串中設定 "Pooling=false"。完成偵錯時,請從連接字串移除此屬性,隨即根據預設啟用共用。
您可以使用 SQL Server 的 [.NET Framework Data Provider] 將 Managed 應用程式連接至 SQL Server 資料來源,如此一來,效能更勝於使用 [OLE DB] 或 [ODBC] 連接。您可以在同一個偵錯器工作階段中同時進行 Managed 偵錯和 Transact-SQL 偵錯。
如果您在 Managed 應用程式執行中時使用偵錯器附加至應用程式,就要選擇您要使用的偵錯類型。如果要進行 Transact-SQL 偵錯,您必須選擇 Transact-SQL 偵錯,如果要偵錯 SQL/CLR 程式碼,則亦須指定 Managed 偵錯。
您可以在附加至正在執行的應用程式後進行 Transact-SQL 偵錯。不過請注意,您只能偵錯完成 [附加] 之後建立的資料庫連接。因此,如果應用程式呼叫時間相當長的預存程序,您就無法附加至先前呼叫該預存程序的連接,只能附加至連接應用程式後呼叫該預存程序的新連接。
如果您要透過以 OleDbDataAdapter 進行的連接偵錯,在呼叫中斷點後長時間等待,會導致連接逾時。若您嘗試在逾時之後繼續偵錯 (例如選擇 [偵錯] 功能表中的 [繼續]),偵錯器會結束 (而不會繼續執行)。這是預期的行為。偵錯器之所以會結束,原因是當發生逾時時,OleDbDataAdapter 不會像 SqlDataAdapter 一樣擲回例外狀況。若要解決此問題,使用 OleDbDataAdapter 時,請提高逾時值的數值。
如需設定 .NET Framework 資料提供者逾時值的詳細資訊,請參閱 .NET Framework 類別庫文件中的 OleDbCommand.CommandTimeout 屬性和 SqlCommand.CommandTimeout 屬性。
其他限制
觸發程序經過引發之後才能偵錯,您無法直接偵錯觸發程序。與在預存程序中啟動偵錯相反,後者會引發觸發程序。
在執行階段偵錯中,有許多子選擇 (例如在等位中) 可以填滿網路緩衝區。這會導致平常順利執行的程式碼在偵錯期間中止。若要取得更多資料,請使用 RecordSet.MoveNext and RecordSet.NextRecordSet。
如果預存程序的名稱包含引號,可能會出現偵錯器錯誤訊息。如需詳細資訊,請參閱偵錯名稱包含引號的預存程序時發生錯誤。
快取值不會自動修改。您不能預期您對地區設定或 Transact-SQL 解譯器快取之參數所做的變更永遠會在您逐步執行 Transact-SQL 陳述式期間生效。儘管您可能已經修改該值,但系統可能永遠不會再檢查該值。您無法強制重新整理快取值。快取值的存在是因為 SQL Server 執行計劃判斷,每次執行陳述式或參考時,不會動態載入某些變數的值。如需詳細資訊,請在 SQL Server 文件中搜尋 "SHOWPLAN"。
您無法在偵錯預存程序的同時附加至原生 SQL Server 處理序。