ole Otomasyon dönüş kodları ve hata bilgileri
ole Otomasyon sistem saklı yordamları dönmek bir int dönüş kodu olan hresult dönen temel ole Otomasyon işlemi.hresult 0 başarılı olduğunu gösterir.Sıfır olmayan bir değer hresult onaltılık biçimde 0x800 ole hata kodu olannnnnn, ancak olarak döndürüldüğünde, bir int de değer bir saklı yordam dönüş kodu hresult sahip form 214nnnnnnn.
Örneğin, geçersiz nesne adı (sqldmo. geçirerekXyzzy) için sp_OACreate geri döndürme yordamı neden olan bir int 2147221005, 0x800401f3 onaltılı olduğu, hresult
Kullanabileceğiniz CONVERT(binary(4), @hresult) dönüştürmek için bir int hresult için bir binary değer.Ancak, kullanma CONVERT(char(10), CONVERT(binary(4), @hresult)) sonuçlar okunamayan bir dize olduğundan her baytının hresult dönüştürülür bir tek ASCII karakter.Aşağıdaki örnek kullanabilirsiniz HexToChar saklı yordam dönüştürmek için bir int hresult için bir char değeri içeren bir okunabilir onaltılık dize.
USE AdventureWorks2008R2;
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 kullanabilirsiniz sp_displayoaerrorinfo ole Otomasyon hatası görüntülemek için ole Otomasyonu yordamları sıfır olmayan bir değer hresult döndüğünde bilgi dönüş kodu.Bu örnek saklı yordam kullanan 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