Aracılığıyla paylaş


ole Otomasyon dönüş kodları ve hata bilgileri

ole Otomasyon sistem saklı yordamlar dönüş bir intdönmek temel ole Otomasyon işlemi tarafından döndürülen hresult kodu. Bir hresult 0 başarılı olduğunu gösterir. Onaltılık biçimde 0x800 ole hata kodu sıfır hresult olduğununnnnn, ancak olarak döndü bir intbir saklı yordamın dönüş kodu hresult değeri formundadır 214nnnnnnn.

Örneğin, geçen geçersiz nesne adı (sqldmo.Xyzzy) için sp_OACreatedönmek için yordamı neden bir int2147221005, hangi 0x800401f3 onaltılı hresult.

Sen-ebilmek kullanma CONVERT(binary(4), @hresult)dönüştürmek için bir inthresult için bir binarydeğer. Ancak, CONVERT(char(10), CONVERT(binary(4), @hresult))sonuçları okunamayan bir dizede, çünkü her baytını hresult tek bir ASCII karakter dönüştürülür. Aşağıdaki örnek kullanarak HexToCharsaklı yordamı dönüştürmek için bir inthresult için bir charokunabilir onaltılık dize içeren değer.

USE AdventureWorks2012;
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

Aşağıdaki örnek saklı yordam, kullandığınız sp_displayoaerrorinfo ole Otomasyon hatası görüntülemek için ole Otomasyonu yordamları sıfır hresult döndüğünde bilgi dönüş kodu. Bu örnek saklı yordamı kullanır 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

İlişkili İçerik

sp_OAGetErrorInfo (Transact-sql)