如何存取當您使用 OLE 自動化系統儲存程式時所傳回之錯誤的其他相關資訊

摘要

OLE 自動化儲存程式需要無限制的存取權,才能正常運作所需的物件。 通常,當目標物件無法解決問題時,可能會看到下列錯誤:

Microsoft[ODBC SQL Server 驅動程式]TDS 串流中的通訊協定錯誤 [Microsoft] [ODBC SQL Server Driver] 函數順序錯誤

其他相關資訊

發生這種情況時,可能會同時出現幾個基本問題。 主要是 [表格式資料流程(TDS)] 錯誤,主要是一般錯誤,除非您也要處理遠端資料服務(RDS)實現,否則這不是很明顯的指標,就是問題來源的指標。 為了增加傳回的錯誤資訊,您需要使用 sp_displayoaerrorinfo 呼叫來取代 sp_oageterrorinfo 通話。 若要存取此額外資訊,您必須先編譯下列 SQL Server 7.0 書籍 Online 文章中提及的兩個簡單的儲存程式: OLE Automation Return Codes and Error Information 本文也詳細說明了為什麼需要這些存儲程式才能抽取其他可用資訊,這將不在本文中討論。編譯完儲存的程式後,前面的錯誤將提供更多可用的資訊,如下列程式碼片段所示,使用修改過的錯誤處理常式來提供更有趣的輸出:

DECLARE @object intDECLARE @hr intEXEC @hr = sp_OACreate 'Nic.cls', @object OUTPUTIF @hr <> 0BEGIN    EXEC sp_displayoaerrorinfo @object, @hr--  EXEC sp_OAGetErrorInfo @object    RETURNEND

在這個範例中啟用的 sp_displayoaerrorinfo 通話看起來會像以下這樣:

OLE 自動化錯誤資訊 HRESULT:0x800401f3 來源: ODSOLE 延伸程式描述:不正確類別字串

在這個範例中,我們會看到「不正確類別字串」錯誤可能會指出在 sp_oacreate 通話中提到的 ProgID 或 CLSID (Nic. cls)未在 SQL Server 上成功註冊為 OLE 物件。 在我們的範例中,這是因為 c # 是虛構物件。如需這些錯誤類型的詳細資訊,請參閱 SQL Server 活頁簿中 sp_oaGetErrorInfo 通話的相關檔,以查看在此出現的情況,請在代碼中的 IF 和 BEGIN 語句之間新增「選取 @hr」,如下所示:

DECLARE @oFTP intDECLARE @hr int  DECLARE @vvar varchar(255)DECLARE @vout intEXEC @hr = sp_OACreate 'Nic.Inet', @object OUTPUTSELECT @hrIF @hr <> 0BEGIN    EXEC sp_displayoaerrorinfo @object, @hr--   EXEC sp_OAGetErrorInfo @object    RETURNEND

這會傳回先前啟用的下列錯誤資訊:------------2147221005(1 row(s) affected)

OLE 自動化錯誤資訊 HRESULT:0x800401f3 來源: ODSOLE 延伸程式描述:不正確類別字串

需要注意的是,只需在 EXEC sp_OAGetErrorInfo @object 呼叫中新增 @hr,否則在「命令已順利完成」的結果中嘗試將是 false 成功。 不過,這實際上不是我們想要的,因為我們需要知道為什麼我們會在程式碼中取得 @hr 的非零結果。注意: 如果您使用的是 Microsoft SQL Server 2005,您可能需要輕微變更此程式碼。 如需詳細資訊,請參閱 SQL Server 2005 書籍 Online 中的「OLE 自動化傳回程序代碼和錯誤資訊」主題。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×