獲取 OLE 自動(dòng)化錯(cuò)誤信息。
sp_OAGetErrorInfo [objecttoken ]
[, source OUTPUT]
[, description OUTPUT]
[, helpfile OUTPUT]
[, helpid OUTPUT ]
objecttoken
是先前用 sp_OACreate 創(chuàng)建的 OLE 對(duì)象的對(duì)象令牌,或 NULL。若指定了 objecttoken,則返回該對(duì)象的錯(cuò)誤信息。若指定為 NULL,則返回整個(gè)批處理的錯(cuò)誤信息。
source OUTPUT
是錯(cuò)誤信息的來(lái)源。如果指定,那么它必須是局部 char、nchar、varchar 或 nvarchar 變量。必要時(shí)會(huì)截?cái)喾祷刂狄赃m合局部變量的要求。
description OUTPUT
是錯(cuò)誤的描述。如果指定,那么它必須是局部 char、nchar、varchar 或 nvarchar 變量。必要時(shí)會(huì)截?cái)喾祷刂狄赃m合局部變量的要求。
helpfile OUTPUT
是 OLE 對(duì)象的幫助文件。如果指定,那么它必須是局部 char、nchar、varchar 或 nvarchar 變量。必要時(shí)會(huì)截?cái)喾祷刂狄赃m合局部變量的要求。
helpid OUTPUT
是幫助文件的上下文 ID。如果指定,那么它必須是局部 int 變量。
說(shuō)明 此存儲(chǔ)過(guò)程的參數(shù)按位置指定,而不是按名稱(chēng)。
0(成功)或非零數(shù)字(失?。?,是由 OLE 自動(dòng)化對(duì)象返回的 HRESULT 的整數(shù)值。
有關(guān) HRESULT 返回代碼的更多信息,請(qǐng)參見(jiàn) OLE 自動(dòng)化返回代碼和錯(cuò)誤信息。
若未指定輸出參數(shù),錯(cuò)誤信息將作為結(jié)果集返回給客戶(hù)端。
列名 | 數(shù)據(jù)類(lèi)型 | 描述 |
---|---|---|
Error | binary(4) | 錯(cuò)誤號(hào)的二進(jìn)制表示。 |
Source | nvarchar(nn) | 錯(cuò)誤的來(lái)源。 |
Description | nvarchar(nn) | 錯(cuò)誤的描述。 |
Helpfile | nvarchar(nn) | 錯(cuò)誤來(lái)源的幫助文件。 |
HelpID | Int | 錯(cuò)誤來(lái)源幫助文件中的幫助上下文 ID。 |
對(duì)每個(gè) OLE 自動(dòng)化存儲(chǔ)過(guò)程(sp_OAGetErrorInfo 除外)的調(diào)用均會(huì)重新設(shè)置錯(cuò)誤信息;因此,sp_OAGetErrorInfo 只能獲取最近一次 OLE 自動(dòng)化存儲(chǔ)過(guò)程調(diào)用的錯(cuò)誤信息。要注意,由于 sp_OAGetErrorInfo 不重新設(shè)置錯(cuò)誤信息,因此可多次調(diào)用該過(guò)程以獲取相同的錯(cuò)誤信息。
下表中列出了 OLE 自動(dòng)化錯(cuò)誤及它們的一般原因。
錯(cuò)誤及 HRESULT | 一般原因 |
---|---|
變量類(lèi)型錯(cuò)誤 (0x80020008) | 作為方法參數(shù)傳遞的 Transact-SQL 值的數(shù)據(jù)類(lèi)型與該方法參數(shù)的 Microsoft® Visual Basic® 數(shù)據(jù)類(lèi)型不匹配,或者將 NULL 值作為方法參數(shù)進(jìn)行了傳遞。 |
未知名稱(chēng) (0x8002006) | 指定對(duì)象的指定屬性名或方法名未找到。 |
類(lèi)字符串無(wú)效 (0x800401f3) | 在 Microsoft SQL Server™ 實(shí)例上,指定的 ProgID 或 CLSID 沒(méi)有注冊(cè)為 OLE 對(duì)象。自定義 OLE 自動(dòng)化服務(wù)器需要在可使用 sp_OACreate 將其實(shí)例化之前進(jìn)行注冊(cè)。這可通過(guò)進(jìn)程中的 (.dll) 服務(wù)器的 regsvr32.exe 實(shí)用工具或本地 (.exe) 服務(wù)器的 /REGSERVER 命令行開(kāi)關(guān)來(lái)實(shí)現(xiàn)。 |
服務(wù)器執(zhí)行失敗 (0x80080005) | 指定的 OLE 對(duì)象注冊(cè)為本地 OLE 服務(wù)器(.exe 文件),但是該 .exe 文件找不到或不能啟動(dòng)。 |
未能找到指定的模塊 (0x8007007e) | 指定的 OLE 對(duì)象被注冊(cè)為進(jìn)程內(nèi) OLE 服務(wù)器(.dll 文件),但是該 .dll 文件找不到或不能被裝載。 |
類(lèi)型不匹配 (0x80020005) | 用于存儲(chǔ)返回的屬性值或者方法返回值的 Transact-SQL 局部變量的數(shù)據(jù)類(lèi)型與屬性或方法返回值的 Visual Basic 數(shù)據(jù)類(lèi)型不匹配?;蛘撸髮傩曰蚍椒ǚ祷刂?,但該屬性或方法未返回值。 |
sp_OACreate 的"context"參數(shù)的數(shù)據(jù)類(lèi)型或值無(wú)效。(0x8004275B) | context 參數(shù)的值應(yīng)為 1、4 或 5 中的一個(gè)。 |
有關(guān)處理 HRESULT 返回代碼的更多信息,請(qǐng)參見(jiàn) OLE 自動(dòng)化返回代碼和錯(cuò)誤信息。
只有 sysadmin 固定服務(wù)器角色的成員才能執(zhí)行 sp_OAGetErrorInfo。
下面的示例顯示 OLE 自動(dòng)化錯(cuò)誤信息。
DECLARE @output varchar(255)
DECLARE @hr int
DECLARE @source varchar(255)
DECLARE @description varchar(255)
PRINT 'OLE Automation Error Information'
EXEC @hr = sp_OAGetErrorInfo @object, @source OUT, @description OUT
IF @hr = 0
BEGIN
SELECT @output = ' Source: ' + @source
PRINT @output
SELECT @output = ' Description: ' + @description
PRINT @output
END
ELSE
BEGIN
PRINT ' sp_OAGetErrorInfo failed.'
RETURN
END
相關(guān)文章