摘要

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?

擴展您的技能

探索訓練 >

優先取得新功能

加入 MICROSOFT 測試人員 >

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×