StoredProcedure usando DataReader

16/04/2006 - 02:46 por Spider25 | Informe spam
Hola, no se que falla en mi code

SqlConnection cn = new SqlConnection ("server=.; database=jfinvergraf;
Trusted_Connection=false; uid=sa; ");
SqlDataAdapter daProductos = new SqlDataAdapter();
DataSet dsProductos = new DataSet();
SqlCommand cmProductos=new SqlCommand("ver_producto",cn);
cmProductos.CommandType=CommandType.StoredProcedure;
SqlParameter categoria =
cmProductos.Parameters.Add("@categoria",SqlDbType.VarChar, 15);
categoria.Value=comboBox1.Text;
cn.Open();
SqlDataReader sdr = cmProductos.ExecuteReader();
MessageBox.Show(categoria.Value.ToString());


Al ejecutar el MessageBox dice que no funciona porque no hay datos, pero ya
he probado el StoredProcedure en el QA SQL,...

Alguien sabe la respuesta?


Saludos

pD: El SP simplemente trae todos los productos de una categoría, que en este
caso arroja un sólo resultado.

:S
 

Leer las respuestas

#1 Alberto Poblacion
16/04/2006 - 10:38 | Informe spam
"Spider25" wrote in message
news:
SqlConnection cn = new SqlConnection ("server=.; database=jfinvergraf;
Trusted_Connection=false; uid=sa; ");
SqlDataAdapter daProductos = new SqlDataAdapter();
DataSet dsProductos = new DataSet();
SqlCommand cmProductos=new SqlCommand("ver_producto",cn);
cmProductos.CommandType=CommandType.StoredProcedure;
SqlParameter categoria =
cmProductos.Parameters.Add("@categoria",SqlDbType.VarChar, 15);
categoria.Value=comboBox1.Text;
cn.Open();
SqlDataReader sdr = cmProductos.ExecuteReader();
MessageBox.Show(categoria.Value.ToString());


Al ejecutar el MessageBox dice que no funciona porque no hay datos, pero
ya he probado el StoredProcedure en el QA SQL,...



Veo que tratas de sacar el resultado del parámetro categoria, por lo que
asumo que el procedimiento almacenado declara dicho parámetro como OUTPUT y
devuelve dentro el resultado. En ese caso, te faltan un par de cosas para
que funcione:

- Hay que definir en el fuente la dirección del parámetro:
categoria.Direction = ParameterDirection.InputOutput;

- Hay que cerrar el DataReader antes de poder leer el parámetro, porque
el DataReader mantiene ocupada la conexión hasta que se cierra y no permite
hacer nada más a través de ella, ni siquiera recibir parámetros:
cn.Open();
SqlDataReader sdr = cmProductos.ExecuteReader();
//sdr.Read...si fuera necesario
sdr.Close();
MessageBox.Show(categoria.Value.ToString());
cn.Close();

Preguntas similares