Как получить сообщение об ошибке из хранимой процедуры на дисплее c#? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть хранимая процедура в моей базе данных, которая выглядит следующим образом:

ALTER PROCEDURE [dbo].[Cambiar_TerceroPedido_copy]
    @CodEmp as varchar(2) = '3',
    @TipoReg as varchar(2) = 'CF',
    @Pedido as integer,
    @NuevoCliente as varchar(10),
    @NuevoClienteEntrega as varchar(10) = null,
    @NuevoClienteFactura as varchar(10) = null,
    @NuevoClientePagoCobro as varchar(10) = null,
    @autorizador as varchar(10) = null,
    @error varchar(100) OUTPUT
AS
...

IF ((SELECT count(distinct T_FACTURAS.FACTURA)
        FROM T_FACTURAS INNER JOIN T_FACTURASL 
                ON T_FACTURAS.CODEMP = T_FACTURASL.CODEMP AND T_FACTURAS.TIPOREG = T_FACTURASL.TIPOREG AND T_FACTURAS.FACTURA = T_FACTURASL.FACTURA
        WHERE (T_FACTURAS.CODEMP = @CodEmp) 
                AND (T_FACTURAS.TIPOREG = @TipoReg) 
                AND (T_FACTURASL.NUMPED = @Pedido)
                AND (gg.dbo.getEsFechaControl(@CodEmp, 'MS', T_FACTURAS.FECHAF) = -1)
    ) > 0) BEGIN

    SET @error = 'ERROR!!!     El pedido tiene facturas asociadas. 1º debe eliminarlas' --+ cast (@CodEmp as varchar) + '/' + cast (@TipoReg as varchar) + '/' + cast (@Pedido as varchar) + '/'
    Print @error
    Return  
END

Если я выполняю этот код, я получаю ошибку в консоли Microsoft SQL Server, но я хочу использовать эту хранимую процедура в моем C# коде, и я хотел бы знать, как я могу получить эту ошибку в MessageBox?

Может быть, сохранить ошибку в переменной? А затем добавить параметры, как это?

   strsql = "exec [dbo].[Cambiar_TerceroPedido_copy] '" + empresaGlobal.empresaID + "','" + c1 + "','" + c2numPed + "','" + c3provClient + "','" + c3provClient + "','" + c3provClient + "','" + c3provClient + "', 'JoseM'";
   SqlCommand cmd = new SqlCommand(strsql, conexion);
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.Add("@error", SqlDbType.Char, 500);
   cmd.Parameters["@error"].Direction = ParameterDirection.Output;

1 Ответ

1 голос
/ 10 февраля 2020

как я могу получить эту ошибку в MessageBox

Добавить обработчик события для SqlConnection.InfoMessage .

InfoMessage событие происходит, когда SQL Сервер возвращает сообщение с серьезностью 10 или меньше. Сообщения с уровнем серьезности от 11 до 20 вызывают ошибку, а сообщения с уровнем серьезности более 20 приводят к закрытию соединения. Дополнительные сведения о SQL уровнях ошибок сервера см. В разделе Серьезность ошибок компонента Database Engine.

...