Tengo el Procedimiento Almacenado:
Código:
Simplemente recoje codigos de cajas, correspondiente al codigo de cliente seleccionado.ALTER PROCEDURE [dbo].[SP_CODCAJAS_CLIENTE] @CLIENTE_CODIGO NVARCHAR(15) AS BEGIN SELECT DISTINCT C_CODIGO FROM CAJAS WHERE CLI_CODIGO = @CLIENTE_CODIGO ORDER BY C_CODIGO END
Al tratar de ejecutarlo desde C# en asp.net para cargar los resultados en un DropDownList de la siguiente manera:
Código:
Salta una excepcion SQL:private void CajasXCliente() { using (SqlConnection sqlCon = new SqlConnection(conn)) { using (SqlCommand cmd = new SqlCommand("SP_CODCAJAS_CLIENTE", sqlCon)) { try { cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@CLIENTE_CODIGO", Convert.ToInt32(lblCaj_CliCod.Text.Trim())); sqlCon.Open(); SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, conn); DataSet dsCli = new DataSet(); da.Fill(dsCli); ddlCaj_CodCaj.DataSource = dsCli; ddlCaj_CodCaj.DataTextField = "C_CODIGO"; ddlCaj_CodCaj.DataValueField = "C_CODIGO"; ddlCaj_CodCaj.DataBind(); ddlCaj_CodCaj.Items.Insert(0, new ListItem("ELEGIR CODIGO", "0")); cmd.ExecuteNonQuery(); sqlCon.Close(); if (dsCli != null) { lblMensaje.Text = "Cajas Cargadas del Sistema"; lblMensaje.ForeColor = System.Drawing.Color.YellowGreen; } else { lblMensaje.Text = "Error cargando Cajas"; lblMensaje.ForeColor = System.Drawing.Color.Red; } } catch (SqlException sqlex) { lblMensaje.Text = ""; lblMensaje.Text = sqlex.ToString(); } } } }
System.Data.SqlClient.SqlException (0x80131904): Procedure or function 'SP_CODCAJAS_CLIENTE' expects parameter '@CLIENTE_CODIGO', which was not supplied.
Pero yo si le paso ese parametro : Convert.ToInt32(lblCaj_CliCod.Text.Trim())
Incluso al ejecutar con puntos de interrupcion me muestra que si existe un valor, pero SQL No lo reconoce.
Ahora, si ejecuto la consulta directamente con código (es decir sin el uso de SP), de la siguiente manera:
Código:
private void CajasXCliente() { using (SqlConnection sqlCon = new SqlConnection(conn)) { using (SqlCommand cmd = new SqlCommand()) { try { cmd.CommandText = "SELECT DISTINCT C_CODIGO FROM CAJAS " + "WHERE CLI_CODIGO = " + lblCaj_CliCod.Text + " " + "ORDER BY C_CODIGO"; cmd.Connection = sqlCon; sqlCon.Open(); SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, conn); DataSet dsCli = new DataSet(); da.Fill(dsCli); ddlCaj_CodCaj.DataSource = dsCli; ddlCaj_CodCaj.DataTextField = "C_CODIGO"; ddlCaj_CodCaj.DataValueField = "C_CODIGO"; ddlCaj_CodCaj.DataBind(); ddlCaj_CodCaj.Items.Insert(0, new ListItem("ELEGIR CODIGO", "0")); cmd.ExecuteNonQuery(); SqlDataReader dr = cmd.ExecuteReader(); sqlCon.Close(); } catch (SqlException sqlex) { lblMensaje.Text = ""; lblMensaje.Text = sqlex.ToString(); } } } }
En ese caso si funciona, pero todas el manejo de datos se debe hacer con Store procedures en el proyecto y este es el mas simple de todos y no me funciona, quisiera por favor saber si alguien identifica la falla en el codigo...
Espero me puedan ayudar.
Saludos