Udostępnij za pośrednictwem


OLE Automation Return Codes and Error Information

Zwrot procedury zapisanej w systemie automatyzacji OLE int zwraca kod, który jest HRESULT, zwracane przez podstawowych operacji automatyzacji OLE.HRESULT 0 oznacza sukces.Niezerowa wartość HRESULT jest kod błędu OLE 0x800 w postaci szesnastkowejNNNNN, ale gdy zwracane w postaci int wartość procedura przechowywana Kod zwrotny HRESULT ma formularza 214NNNNNNN.

Na przykład przekazując nazwy obiektu nieprawidłowe (SQLDMO.Xyzzy) do sp_OACreate powoduje, że procedury przywrócić int HRESULT 2147221005, czyli 0x800401f3 w formacie szesnastkowym.

Można użyć CONVERT)Binary(4), hresult: @) Aby przekonwertować int HRESULT do plik binarny wartość.Jednak przy użyciu CONVERT)CHAR(10), CONVERT(Binary(4), hresult: @)) w wyniku ciąg nieczytelny, ponieważ każdego bajtu HRESULT jest konwertowany na jeden znak ASCII.Można użyć następujących przykładowych HexToChar przechowywanej procedury, aby przekonwertować int HRESULT do CHAR wartość, która zawiera czytelny ciąg szesnastkowy.

USE AdventureWorks;
GO
IF EXISTS(SELECT name FROM sys.objects
          WHERE name = N'dbo.sp_HexToChar')
    DROP PROCEDURE HexToChar;
GO
CREATE PROCEDURE dbo.sp_HexToChar
    @BinValue varbinary(255),
    @HexCharValue nvarchar(255) OUTPUT
AS
    DECLARE @CharValue nvarchar(255);
    DECLARE @Position int;
    DECLARE @Length int;
    DECLARE @HexString nchar(16);
    SELECT @CharValue = N'0x';
    SELECT @Position = 1;
    SELECT @Length = DATALENGTH(@BinValue);
    SELECT @HexString = N'0123456789ABCDEF';
    WHILE (@Position <= @Length)
    BEGIN
        DECLARE @TempInt int;
        DECLARE @FirstInt int;
        DECLARE @SecondInt int;
        SELECT @TempInt = CONVERT(int, SUBSTRING(@BinValue,@Position,1));
        SELECT @FirstInt = FLOOR(@TempInt/16);
        SELECT @SecondInt = @TempInt - (@FirstInt*16);
        SELECT @CharValue = @CharValue +
            SUBSTRING(@HexString, @FirstInt+1, 1) +
            SUBSTRING(@HexString, @SecondInt+1, 1);
        SELECT @Position = @Position + 1;
    END
    SELECT @HexCharValue = @CharValue;
GO
DECLARE @BinVariable varbinary(35);
DECLARE @CharValue nvarchar(35);

SET @BinVariable = 123456;

EXECUTE dbo.sp_HexToChar
    @binvalue = @BinVariable,
    @HexCharValue = @CharValue OUTPUT;

SELECT @BinVariable AS BinaryValue,
    @CharValue AS CharacterRep;
GO

Następujące procedura przechowywana próbki, można użyć sp_displayoaerrorinfo , aby wyświetlić informacje o automatyzacji OLE, po jednej z procedur automatyzacji OLE zwraca wartość różną od zera wartość HRESULT zwraca kod.Użycie procedura przechowywana w tym przykładzie HexToChar.

CREATE PROCEDURE dbo.sp_DisplayOAErrorInfo
    @Object int,
    @HResult int
AS
    DECLARE @Output nvarchar(255);
    DECLARE @HRHex nchar(10);
    DECLARE @HR int;
    DECLARE @Source nvarchar(255);
    DECLARE @Description nvarchar(255);
    PRINT N'OLE Automation Error Information';
    EXEC HexToChar @HResult, @HRHex OUT;
    SELECT @Output = N'  HRESULT: ' + @HRHex;
    PRINT @Output;
    EXEC @HR = sp_OAGetErrorInfo
        @Object,
        @Source OUT,
        @Description OUT;
    IF @HR = 0
    BEGIN
        SELECT @Output = N'  Source: ' + @Source;
        PRINT @Output;
        SELECT @Output = N'  Description: '
               + @Description;
        PRINT @Output;
    END
    ELSE
    BEGIN
       PRINT N' sp_OAGetErrorInfo failed.';
       RETURN;
    END
GO

See Also

Other Resources