StoreProcedure

15/07/2004 - 13:29 por Caio | Informe spam
Hola Gente.
Estoy llamando desde c# a algunos stores procedures de una
base de datos en sql server y no se como hacer para captar
(desde c#) cuando dicho store me devuelve un error.

El store procedure es algo asi:

.

IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre = @Nombre)
BEGIN
print 'No puede haber dos clientes con el mismo
nombre'
return(1)
END
ELSE
BEGIN
INSERT INTO
RETURN(0)
END

GO


Alguien me puede ayudar.
Saludos

Preguntas similare

Leer las respuestas

#1 Pedro Luna Montalvo
15/07/2004 - 15:17 | Informe spam
Si te refieres a como atrapar el mensaje del "PRINT", lo que debes hacer es
manejar el evento InfoMessage del objeto conexion.

Este evento se disparara con la coleccion de mensajes "PRINT" que sucedan en
esa conexion.

Saludos
Pedro Luna. MVP


"Caio" escribió en el mensaje
news:2cba401c46a5f$05029830$
Hola Gente.
Estoy llamando desde c# a algunos stores procedures de una
base de datos en sql server y no se como hacer para captar
(desde c#) cuando dicho store me devuelve un error.

El store procedure es algo asi:

.

IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre = @Nombre)
BEGIN
print 'No puede haber dos clientes con el mismo
nombre'
return(1)
END
ELSE
BEGIN
INSERT INTO
RETURN(0)
END

GO


Alguien me puede ayudar.
Saludos
Respuesta Responder a este mensaje
#2 Pablo Cibraro
15/07/2004 - 15:25 | Informe spam
Que tal, no existe forma de captar los errores desde codigo con la forma en
que los estas informando ( a través de Print ).
Los mensajes de print solo se ven, si se esta ejecutando una consulta
directamente con el Sql analyser u otra herramienta para ejecución de
consultas.
Si queres informar del error a la aplicación, tenes que utilizar la
sentencia RaiseError.

El store procedure quedaría de la siguiente forma:

IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre = @Nombre)
BEGIN
RaiseError ( 'No puede haber dos clientes con el mismo nombre', 16,
1 )
END

Al ejecutar el store procedure, ADO arrojara una excepción del tipo
SQLExeption en la aplicación.

Saludos.
Pablo Cibraro.



"Caio" wrote in message
news:2cba401c46a5f$05029830$
Hola Gente.
Estoy llamando desde c# a algunos stores procedures de una
base de datos en sql server y no se como hacer para captar
(desde c#) cuando dicho store me devuelve un error.

El store procedure es algo asi:

.

IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre = @Nombre)
BEGIN
print 'No puede haber dos clientes con el mismo
nombre'
return(1)
END
ELSE
BEGIN
INSERT INTO
RETURN(0)
END

GO


Alguien me puede ayudar.
Saludos
Respuesta Responder a este mensaje
#3 Pedro Luna Montalvo
15/07/2004 - 15:35 | Informe spam
Saludos Pablo:

Revisa el evento InfoMessage del objeto SqlConnection. Ese atrapa los
mensajes emitidos con el PRINT.

Pedro Luna, MVP
Gye, ECU


"Pablo Cibraro" escribió en el mensaje
news:
Que tal, no existe forma de captar los errores desde codigo con la forma


en
que los estas informando ( a través de Print ).
Los mensajes de print solo se ven, si se esta ejecutando una consulta
directamente con el Sql analyser u otra herramienta para ejecución de
consultas.
Si queres informar del error a la aplicación, tenes que utilizar la
sentencia RaiseError.

El store procedure quedaría de la siguiente forma:

IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre = @Nombre)
BEGIN
RaiseError ( 'No puede haber dos clientes con el mismo nombre', 16,
1 )
END

Al ejecutar el store procedure, ADO arrojara una excepción del tipo
SQLExeption en la aplicación.

Saludos.
Pablo Cibraro.



"Caio" wrote in message
news:2cba401c46a5f$05029830$
> Hola Gente.
> Estoy llamando desde c# a algunos stores procedures de una
> base de datos en sql server y no se como hacer para captar
> (desde c#) cuando dicho store me devuelve un error.
>
> El store procedure es algo asi:
>
> .
>
> IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre = @Nombre)
> BEGIN
> print 'No puede haber dos clientes con el mismo
> nombre'
> return(1)
> END
> ELSE
> BEGIN
> INSERT INTO
> RETURN(0)
> END
>
> GO
>
>
> Alguien me puede ayudar.
> Saludos


Respuesta Responder a este mensaje
#4 Alejandro Perez
15/07/2004 - 16:21 | Informe spam
Hola Pablo!, Pedro tiene razon, los PRINT si se pueden
capturar con el evento InfoMessage, pero tambien estoy de
acuerdo contigo, si lo que quiere es generar un error
cuando dos clientes tengan el mismo nombre, lo mejor es
utilizar un RAISERROR en el SP.

Para darle la info completa, luego en tu app, lo que
tienes que hacer es capturar ese error que te va a
generar el SP.

try
{
sqlConnection1.Open();
sqlCommand1.ExecuteNonQuery();
}
catch(System.Data.SqlClient.SqlException exSQL)
{
MessageBox.Show(exSQL.Message);
}

Saludos!

Alejandro Perez
MCSD/MCDBA/MCT
Caracas - Venezuela


Saludos Pablo:

Revisa el evento InfoMessage del objeto SqlConnection.


Ese atrapa los
mensajes emitidos con el PRINT.

Pedro Luna, MVP
Gye, ECU


"Pablo Cibraro" escribió en el


mensaje
news:
Que tal, no existe forma de captar los errores desde




codigo con la forma
en
que los estas informando ( a través de Print ).
Los mensajes de print solo se ven, si se esta




ejecutando una consulta
directamente con el Sql analyser u otra herramienta




para ejecución de
consultas.
Si queres informar del error a la aplicación, tenes




que utilizar la
sentencia RaiseError.

El store procedure quedaría de la siguiente forma:

IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre =




@Nombre)
BEGIN
RaiseError ( 'No puede haber dos clientes con el




mismo nombre', 16,
1 )
END

Al ejecutar el store procedure, ADO arrojara una




excepción del tipo
SQLExeption en la aplicación.

Saludos.
Pablo Cibraro.



"Caio" wrote in




message
news:2cba401c46a5f$05029830$
> Hola Gente.
> Estoy llamando desde c# a algunos stores procedures




de una
> base de datos en sql server y no se como hacer para




captar
> (desde c#) cuando dicho store me devuelve un error.
>
> El store procedure es algo asi:
>
> .
>
> IF EXISTS (SELECT 1 FROM CLIENTES WHERE Nombre =




@Nombre)
> BEGIN
> print 'No puede haber dos clientes con el mismo
> nombre'
> return(1)
> END
> ELSE
> BEGIN
> INSERT INTO
> RETURN(0)
> END
>
> GO
>
>
> Alguien me puede ayudar.
> Saludos






.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida