Valor devuelto por stored procedure sql server

03/07/2006 - 17:33 por Hugo Gsell | Informe spam
Tengo un procedimiento almacenado que devuelve por un lado valores output
nIdPaso int output
y además el mismo procedure me devuelve un RETURN @Error (que esta definida
con declare en el procedure)
En mi codigo vb llamo al procedure mediante

cmd.ExecuteNonQuery()

donde previamente establecí los parametros de entrada y salida... y estos
funcionan bien.. a los de salida los defino como

cmd.Parameters.Add("@nIdPaso", SqlDbType.Int)
cmd.Parameters("@nIdPaso").Direction = ParameterDirection.Output

y los leo luego del cmd.ExecuteNonQuery() accediendo da la propiedad
cmd.Parameters("@nIdPaso").Value

El tema es ¿¿COMO DEFINO Y RECUPERO el valor de ERROR que me devuelve con
RETURN @@Error en mi proc almacenado??

Hugo A. Gsell
Sgoi del Estero
Argentina

Preguntas similare

Leer las respuestas

#1 Hugo Gsell
03/07/2006 - 18:06 | Informe spam
ya logré solucionar esto... lo hice poniendo
cmd.Parameters("@DevError").Direction = ParameterDirection.ReturnValue...
ahora el tema es que por ejemplo forzo en el stored procedure un error de
clave duplicada y se va del codigo vb dandome un error pero NO ME DEVUELVE
EL NRO en DevError
HUGO A. GSELL

"Hugo Gsell" escribió en el mensaje
news:
Tengo un procedimiento almacenado que devuelve por un lado valores output
nIdPaso int output
y además el mismo procedure me devuelve un RETURN @Error (que esta
definida con declare en el procedure)
En mi codigo vb llamo al procedure mediante

cmd.ExecuteNonQuery()

donde previamente establecí los parametros de entrada y salida... y estos
funcionan bien.. a los de salida los defino como

cmd.Parameters.Add("@nIdPaso", SqlDbType.Int)
cmd.Parameters("@nIdPaso").Direction =
ParameterDirection.Output

y los leo luego del cmd.ExecuteNonQuery() accediendo da la propiedad
cmd.Parameters("@nIdPaso").Value

El tema es ¿¿COMO DEFINO Y RECUPERO el valor de ERROR que me devuelve con
RETURN @@Error en mi proc almacenado??

Hugo A. Gsell
Sgoi del Estero
Argentina

Respuesta Responder a este mensaje
#2 Carlos Gómez
03/07/2006 - 18:09 | Informe spam
Hugo Gsell wrote:

Tengo un procedimiento almacenado que devuelve por un lado valores output
nIdPaso int output
y además el mismo procedure me devuelve un RETURN @Error (que esta
definida con declare en el procedure)
En mi codigo vb llamo al procedure mediante

cmd.ExecuteNonQuery()

donde previamente establecí los parametros de entrada y salida... y estos
funcionan bien.. a los de salida los defino como

cmd.Parameters.Add("@nIdPaso", SqlDbType.Int)
cmd.Parameters("@nIdPaso").Direction > ParameterDirection.Output

y los leo luego del cmd.ExecuteNonQuery() accediendo da la propiedad
cmd.Parameters("@nIdPaso").Value

El tema es ¿¿COMO DEFINO Y RECUPERO el valor de ERROR que me devuelve con
RETURN @@Error en mi proc almacenado??

Hugo A. Gsell
Sgoi del Estero
Argentina



Los valores devueltos mediante RETURN son los que se almacenan en el
parametro @ReturnValue:

msgbox cmd.Parameters(0).Value <--Ese es @ReturnValue

Desde Aguadulce - España
Carlos Gomez
Respuesta Responder a este mensaje
#3 Leonardo Azpurua [mvp vb]
03/07/2006 - 18:19 | Informe spam
"Hugo Gsell" escribió en el mensaje
news:
Tengo un procedimiento almacenado que devuelve por un lado valores output
nIdPaso int output
y además el mismo procedure me devuelve un RETURN @Error (que esta
definida con declare en el procedure)
En mi codigo vb llamo al procedure mediante

cmd.ExecuteNonQuery()

donde previamente establecí los parametros de entrada y salida... y estos
funcionan bien.. a los de salida los defino como

cmd.Parameters.Add("@nIdPaso", SqlDbType.Int)
cmd.Parameters("@nIdPaso").Direction =
ParameterDirection.Output

y los leo luego del cmd.ExecuteNonQuery() accediendo da la propiedad
cmd.Parameters("@nIdPaso").Value

El tema es ¿¿COMO DEFINO Y RECUPERO el valor de ERROR que me devuelve con
RETURN @@Error en mi proc almacenado??



Hola, Hugo:

Puedes crear un parametro con la propiedad Direction a
ParameterDirection.ReturnValue.

Esto esta extraido de una aplicacion real. Hace tiempo que no la toco, y
nunca entró en operación, pero imagino que funcionará:

Dim retP As SqlParameter = cmd.Parameters.Add("@returnValue",
SqlDbType.BigInt)
retP.Direction = ParameterDirection.ReturnValue
cmd.ExecuteNonQuery()
retVal = retP.Value


Salud!
Respuesta Responder a este mensaje
#4 Carlos Gómez
03/07/2006 - 19:03 | Informe spam
Hugo Gsell wrote:

ya logré solucionar esto... lo hice poniendo
cmd.Parameters("@DevError").Direction = ParameterDirection.ReturnValue...
ahora el tema es que por ejemplo forzo en el stored procedure un error de
clave duplicada y se va del codigo vb dandome un error pero NO ME DEVUELVE
EL NRO en DevError
HUGO A. GSELL




En tu anterior consulta 'numero de error' te he colocado como usar RAISERROR
en SQLServer. De esta forma, puedes crear tu propio mensaje de error, y
usar un nº de error. Pero el nº de error que puedes usar no es a tu gusto,
ya que SQLServer, usa ese nº de error de la siguiente forma:

Severity Connection_is_closed Generates_SqlException Meaning
<10 No No Informational messages that
do not necessarily
represent error
conditions.
11–16 No Yes Errors that can be
corrected by the user,
for example, by
retrying the operation
with amended input
data.
17–19 No Yes Resource or system
errors.
20–25 Yes Yes Fatal system errors
(including hardware
errors). Client's
connection is
terminated.

Desde Aguadulce - Espaà±a
Carlos Gomez
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida