Codici restituiti e informazioni sugli errori di automazione OLEOLE Automation Return Codes and Error Information

Le stored procedure del sistema di automazione OLE restituiscono un codice int che corrisponde al valore HRESULT restituito dall'operazione di automazione OLE sottostante.The OLE Automation system stored procedures return an int return code that is the HRESULT returned by the underlying OLE Automation operation. Se HRESULT è 0, l'operazione è riuscita.An HRESULT of 0 indicates success. Un valore HRESULT diverso da zero corrisponde a un codice di errore OLE nel formato esadecimale 0x800nnnnn. Se viene restituito come valore di tipo int nel codice di restituzione di una stored procedure, HRESULT viene espresso nel formato 214nnnnnnn.A nonzero HRESULT is an OLE error code of the hexadecimal form 0x800nnnnn, but when returned as an int value in a stored procedure return code, HRESULT has the form 214nnnnnnn.

Se, ad esempio, si passa un nome di oggetto non valido (SQLDMO.Xyzzy) alla stored procedure sp_OACreate, viene restituito il valore HRESULT di tipo int 2147221005, ovvero 0x800401f3 in formato esadecimale.For example, passing an invalid object name (SQLDMO.Xyzzy) to sp_OACreate causes the procedure to return an int HRESULT of 2147221005, which is 0x800401f3 in hexadecimal.

È possibile usare CONVERT(binary(4), @hresult) per convertire un valore HRESULT di tipo int in un valore binario .You can use CONVERT(binary(4), @hresult) to convert an int HRESULT to a binary value. Se tuttavia si utilizza CONVERT(char(10), CONVERT(binary(4), @hresult)) viene generata una stringa illeggibile, in quanto ogni byte di HRESULT viene convertito in un singolo carattere ASCII.However, using CONVERT(char(10), CONVERT(binary(4), @hresult)) results in an unreadable string, because each byte of the HRESULT is converted to a single ASCII character. È possibile usare la stored procedure HexToChar di esempio riportata di seguito per convertire un valore HRESULT di tipo int in un valore char contenente una stringa esadecimale leggibile.You can use the following sample HexToChar stored procedure to convert an int HRESULT to a char value that contains a readable hexadecimal string.

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  

La stored procedure sp_displayoaerrorinfo dell'esempio seguente consente di visualizzare le informazioni sugli errori di automazione OLE quando una delle procedure di automazione OLE restituisce un codice di restituzione HRESULT diverso da zero.You can use the following sample stored procedure, sp_displayoaerrorinfo to display OLE Automation error information when one of the OLE Automation procedures returns a nonzero HRESULT return code. Questa stored procedure di esempio usa HexToChar.This sample stored procedure uses 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 sp_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  

sp_OAGetErrorInfo (Transact-SQL)sp_OAGetErrorInfo (Transact-SQL)