Duda con la forma de operar proc. almacenado

11/12/2004 - 14:21 por Tio | Informe spam
Tengo un proc almacenado que se limita a devolver una fila:

select * from Articulos where ID = @ID

para llamarlo hago:

cmd.executeReader, ya que quiero que me devuelva una fila.

pero ¿como obtengo el valor @Return_Value que genera el procedimento
almacenado ?.


Hago esto pero no va:

int resultado = (int)dr["@Return_Value"];



dr = SqlDataReader

Preguntas similare

Leer las respuestas

#1 A.Poblacion
11/12/2004 - 16:22 | Informe spam
Para obtener el return value:

SqlConnection cn = ...
cn.Open();
SqlCommand cmd = new SqlCommand("select * from Articulos where ID = @ID",
cn);
SqlParameter parmID = new Sqlarameter("@ID", ...);
parmID.Value = ...
parmID.Direction = ParameterDirection.Input;
cmd.Parameters.Add(parmID);
SqlParameter parmResultado = new Sqlarameter("@Return_Value", ...);
parmResultado.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(parmResultado);
SqlDataReader rdr = cmd.ExecuteReader();
rdr.Read();
//Aqui rdr["..."] devuelve las columnas ("*" en la sentencia)
rdr.Close();
resultado = parmResultado.Value; //Esto te da lo que devuelva el
procedimiento
cn.Close(); //Importante: leer el parmResultado antes de cerrar la conexion


From: "Tio"
Newsgroups: microsoft.public.es.csharp
Sent: Saturday, December 11, 2004 2:21 PM
Subject: Duda con la forma de operar proc. almacenado


Tengo un proc almacenado que se limita a devolver una fila:

select * from Articulos where ID = @ID

para llamarlo hago:

cmd.executeReader, ya que quiero que me devuelva una fila.

pero ¿como obtengo el valor @Return_Value que genera el procedimento
almacenado ?.


Hago esto pero no va:

int resultado = (int)dr["@Return_Value"];



dr = SqlDataReader


Respuesta Responder a este mensaje
#2 Tio
11/12/2004 - 18:20 | Informe spam
Hola!

Resulta que los parámetros ya los tengo configurados en tiempo de diseño,
así que parte del código no me es necesario aunque me ha servido para
localizar el error (creo pues no estoy seguro de haberlo solucionado bien).

Resulta que finalmente este es mi código

dr.Read(); // Voy a los datos del dataReader

tbUnidades.Text = dr["Unidades"].ToString ();

tbPrecio.Text = dr["Precio"].ToString();

tbStockMin.Text = dr["StockMin"].ToString();


con.Close(); // He de cerrar para poder leer parámetro salida

int resultado = (int)cmd.Parameters ["@RETURN_VALUE"].Value;


// cierro conexión

con.Close();


Me parece extraño que no pueda leer el Return_value hasta que la conexión no
ha sido cerrada, es decir, si intento leer el Return_value mientras la
conexión está activa me da error. ¿Esto tiene alguna lógica que desconozco?.

Gracias!
Respuesta Responder a este mensaje
#3 A.Poblacion
11/12/2004 - 22:02 | Informe spam
Veo una cosa rara en tu código, y es que has puesto dos veces con.Close().
Supongo que será un error al transcribirlo y que el primero es en realidad
un dr.Close().
Mientras el datareader está abierto, no se puede usar la conexión para nada
más. Una vez que cierras el datareader, ya se pueden leer los parámetros
devueltos por el procedimiento, y después de eso ya se puede cerrar la
conexión.

"Tio" wrote in message
news:
Hola!

Resulta que los parámetros ya los tengo configurados en tiempo de diseño,
así que parte del código no me es necesario aunque me ha servido para
localizar el error (creo pues no estoy seguro de haberlo solucionado


bien).

Resulta que finalmente este es mi código

dr.Read(); // Voy a los datos del dataReader

tbUnidades.Text = dr["Unidades"].ToString ();

tbPrecio.Text = dr["Precio"].ToString();

tbStockMin.Text = dr["StockMin"].ToString();


con.Close(); // He de cerrar para poder leer parámetro salida

int resultado = (int)cmd.Parameters ["@RETURN_VALUE"].Value;


// cierro conexión

con.Close();


Me parece extraño que no pueda leer el Return_value hasta que la conexión


no
ha sido cerrada, es decir, si intento leer el Return_value mientras la
conexión está activa me da error. ¿Esto tiene alguna lógica que


desconozco?.

Gracias!


Respuesta Responder a este mensaje
#4 Tio
12/12/2004 - 11:25 | Informe spam
OK, muchas gracias!

Un saludo, nos leemos!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida