es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Powershell – Mensaje de error ExecuteNonQuery (Transact-SQL).

Tengo un script de PowerShell que ejecuta scripts SQL en una base de datos de SQL Server utilizando un nuevo objeto Microsoft.SqlServer.Management.Common.ServerConnection como este:

$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection

Y para ejecutar el script utilizo el método ExecuteNonQuery:

$conn.ExecuteNonQuery($ScriptToRun);

El script puede fallar. Cuando esto sucede, necesito que el script de PowerShell imprima el mensaje de excepción detallado, pero siempre imprime el mismo mensaje genérico: ‘Excepción al llamar a “ExecuteNonQuery” con “1” argumento(s):”Se produjo una excepción al ejecutar una instrucción o lote Transact-SQL.”‘

El manejo de errores se realiza de la siguiente manera:

Catch
    {
        Write-Output $_.Exception.Message

        $conn.RollBackTransaction()
        throw $_.Exception

    }

¿Hay alguna manera de imprimir el error específico de Transact-SQL que se lanzó?

¡Gracias!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de imprimir el error específico de Transact-SQL que se produjo. Puede modificar el bloque catch en su script de PowerShell para incluir la clase SqlException y acceder a información de error más detallada. Puede hacer esto agregando esta línea al inicio del bloque catch:

    catch [System.Data.SqlClient.SqlException]
    

    Entonces, puede acceder al mensaje de error y al código utilizando las propiedades del objeto SqlException:

    Write-Output $_.Exception.Message
    Write-Output $_.Exception.Number
    

    Esto le proporcionará información más específica sobre el error que ocurrió. Además, puede agregar registro u otras acciones en el bloque catch para manejar el error de manera más específica, si es necesario.

Comments are closed.