Estimados.
Tengo el Procedimiento Almacenado:
Código:
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
Simplemente recoje codigos de cajas, correspondiente al codigo de cliente seleccionado.
Al tratar de ejecutarlo desde C# en asp.net para cargar los resultados en un DropDownList de la siguiente manera:
Código:
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();
}
}
}
}
Salta una excepcion SQL:
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