Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/01/2015, 16:23
Angel_Nemo
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años, 6 meses
Puntos: 0
No reconoce parametro para store procedure

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