Valor de retorno de un procedimiento almacenado

18/11/2003 - 17:11 por JoseMiguel | Informe spam
Hola a todos,
estoy haciendo una aplicacion web que utiliza SQLServer como base de
datos y procedimientos almacenados como metodo para interactuar con este. El
caso es que necesito recuperar un resultado despues de la ejecución de un
procedimiento. Si lo ejecuto desde el codigo de mi aplicación, nunca me
devuelve el resultado, si lo hago desde el analizador de consultas sql en
modo depuración, si que devuelve el valor que yo necesito. Acaso no lo pongo
bien?:

Dim intReturn as integer
.
'Previa asignacion de valores a parametros
intReturn = myDataAdapter.InsertCommand.ExecuteNonQuery()

En el procedimiento:

CREATE PROCEDURE prpInsertCustomer
@idClientePK int output,
@otros parametros

AS
IF @@error = 0 BEGIN
COMMIT
END ELSE BEGIN
SELECT @IdClientePK = 0
ROLLBACK TRAN
END

RETURN @IdClientePK

GO

Ven ustedes algo mal en este procedimiento?

Gracias a todos por vuestras respuestas.

JoséMiguel

Preguntas similare

Leer las respuestas

#1 Aragorn \(CL\)
18/11/2003 - 18:38 | Informe spam
estas ocupando :

ExecuteNonQuery()

deberias ocupar

ExecuteReader()

Aragorn.


"JoseMiguel" <josemiguelQya.com> escribió en el mensaje
news:
Hola a todos,
estoy haciendo una aplicacion web que utiliza SQLServer como base de
datos y procedimientos almacenados como metodo para interactuar con este.


El
caso es que necesito recuperar un resultado despues de la ejecución de un
procedimiento. Si lo ejecuto desde el codigo de mi aplicación, nunca me
devuelve el resultado, si lo hago desde el analizador de consultas sql en
modo depuración, si que devuelve el valor que yo necesito. Acaso no lo


pongo
bien?:

Dim intReturn as integer
.
'Previa asignacion de valores a parametros
intReturn = myDataAdapter.InsertCommand.ExecuteNonQuery()

En el procedimiento:

CREATE PROCEDURE prpInsertCustomer
@idClientePK int output,
@otros parametros

AS
IF @@error = 0 BEGIN
COMMIT
END ELSE BEGIN
SELECT @IdClientePK = 0
ROLLBACK TRAN
END

RETURN @IdClientePK

GO

Ven ustedes algo mal en este procedimiento?

Gracias a todos por vuestras respuestas.

JoséMiguel


Respuesta Responder a este mensaje
#2 Manuel Conde
19/11/2003 - 09:57 | Informe spam
Hola.

Kería preguntar si todo el mundo hace estos pasos para, simplemente, obtener
un valor de un select.

Es ke me parecen una barbaridad de líneas de código para algo ke se puede
hacer mucho más sencillo.

Manuel Conde (http://manuel.conde.name)
Maicrosoft LVP (www.maicas.net)


"SqlRanger" escribió en el mensaje
news:#B#
José Miguel,

El valor de retorno de un procedimiento almacenado se recoge en un párametro
que tiene como dirección ReturnValue y es de tipo Int. El nombre del
parámetro es indiferente, salvo que tiene que empezar por @ como todos los
nombres de parámetro.
Respuesta Responder a este mensaje
#3 Freddy Cáceres
19/11/2003 - 14:01 | Informe spam
yo, por lo menos ahora en .net, si, lo hago casi de la misma forma que tu
con otro proveedor nomas (OLEDB).

y lo utilizo la mayoria de las veces para saber la cantidad de registros que
me trajo.


-
Saludos
Freddy Cáceres
Santiago - Chile

"Manuel Conde" escribió en el mensaje
news:bpfbf7$1nprlu$
Hola.

Kería preguntar si todo el mundo hace estos pasos para, simplemente,


obtener
un valor de un select.

Es ke me parecen una barbaridad de líneas de código para algo ke se puede
hacer mucho más sencillo.

Manuel Conde (http://manuel.conde.name)
Maicrosoft LVP (www.maicas.net)


"SqlRanger" escribió en el mensaje
news:#B#
José Miguel,

El valor de retorno de un procedimiento almacenado se recoge en un


párametro
que tiene como dirección ReturnValue y es de tipo Int. El nombre del
parámetro es indiferente, salvo que tiene que empezar por @ como todos los
nombres de parámetro.




Respuesta Responder a este mensaje
#4 Eladio Rincón
19/11/2003 - 22:05 | Informe spam
Hola Jesús :-),

Qué curioso; yo siempre que defino el argumento valor de retorno de los procedimientos SIEMPRE he usado como nombre @RETURN_VALUE; así que tenía que probarlo ... en fin lo he probado con cualquier nombre y funciona como tú comentas !

Gracias !!

Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

"SqlRanger" escribió en el mensaje news:%23B%
José Miguel,

El valor de retorno de un procedimiento almacenado se recoge en un párametro que tiene como dirección ReturnValue y es de tipo Int. El nombre del parámetro es indiferente, salvo que tiene que empezar por @ como todos los nombres de parámetro.

Por ejemplo:

' Conexión a la base de datos
Dim con As New SqlConnection("cadena de conexión")

' Creamos el comando
Dim cmd As New SqlCommand("spProcedimientoAlmacenado", con)
cmd.CommandType = CommandType.StoredProcedure

' Añadirmos el parámetro que recogerá el valor de retorno
cmd.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue

'Añadimos el resto de los parámetros
cmd.Parameters.Add("@Param1", SqlDbType.VarChar, 50).Value = ValorParam1
cmd.Parameters.Add("@Param2", ValorParam2)
cmd.Parameters.Add("@Param3", SqlDbType.UniqueIdentifier, 16).Value = ValorParam3

' Abrimos la conexión
con.Open()

' Ejecutamos el procedimiento almacenado.
' El valor devuelto por ExecuteNonQuery es el número de registros afectados
Dim RegistrosAfectados As Integer = cmd.ExecuteNonQuery()

' El valor de retorno lo obtenemos por medio del parámetro @ReturnValue
Dim ReturnValue As Integer = cmd.Parameters("@ReturnValue").Value

' Cerramos la conexión
con.Close()


Saludos:

Jesús López
MVP Microsoft .NET

"No darás tropezón ni desatino que no te haga adelantar camino"
Respuesta Responder a este mensaje
#5 Manuel Conde
20/11/2003 - 09:55 | Informe spam
Hola Jesús.

Estoy de acuerdo en ke un SP es mucho más ke un select, de hecho hay ciertos
procesos complejos ke "tiran" mucho de la BD ke es mejor hacerlos así. Pero
lo ke yo kería decir es ke para hacer un simple select no creo ke sea
necesario toda esa parafernalia de líneas de código.

T-SQL está muy bien, pero yo ahora te digo (es un suponer, claro): "no
estamos contentos con nuestro ISP y hemos migrado el servicio a otro ke
emplea Oracle en lugar de SQL Server. Mañana tiene ke estar funcionando el
servicio."

¿Ké haces? Porke si tienes montones de SP los tienes ke traducir todos
(suponiendo ke sepas usar PL-SQL) para mañana...

Lo peor de todo es si te piden una "demo" portable de tu site, ke debe
funcionar en Access.

Ah, respecto a arrastrar cosas al entorno automático del NET... de
automatismos de microsoft no kiero saber nada. Prefiero cortar y pegar
código hecho por mi, ke sé ké hace exactamente.

Manuel Conde (http://manuel.conde.name)
Maicrosoft LVP (www.maicas.net)


"SqlRanger" escribió en el mensaje
news:#
Todo el mundo debería seguir estos pasos para ejecutar un procedimiento
almacenado que devuelva un valor de retorno. Un procedimiento almacenado es
mucho más que un select. En un procedimiento almacenado se puede hacer casi
cualquier cosa que permita T-SQL, no es una simple select, puede tener
decenas de líneas de código T-SQL.

Además si te quieres ahorrar escribir código, prueba a arrastrar un
procedimiento almacenado desde el explorador de servidores a un componente o
un formulario, verás como automáticamente se te crea el código que configura
el comando. Luego sólo tienes que darle el valor de los parámetros y
ejecutarlo.


Saludos:

Jesús López
MVP Microsoft .NET

"No darás tropezón ni desatino que no te haga adelantar camino"
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida