Foros del Web » Programación para mayores de 30 ;) » .NET »

No reconoce parametro para store procedure

Estas en el tema de No reconoce parametro para store procedure en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/01/2015, 16:23
 
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
  #2 (permalink)  
Antiguo 28/01/2015, 14:09
Avatar de lucasmoadr  
Fecha de Ingreso: marzo-2007
Ubicación: Llavallol, Buenos Aires
Mensajes: 220
Antigüedad: 17 años, 7 meses
Puntos: 5
Respuesta: No reconoce parametro para store procedure

trata de poner esto:

cmd.Parameters.AddWithValue("CLIENTE_CODIGO", Convert.ToInt32(lblCaj_CliCod.Text.Trim()));

sacale el @ al paramtro.

Saludos!
__________________
Alquileres en la costa
Se tu mismo
  #3 (permalink)  
Antiguo 29/01/2015, 06:55
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: No reconoce parametro para store procedure

Gracias por responder lucasmoadr

Pero el error sigue siendo el mismo.


Slaudos
  #4 (permalink)  
Antiguo 29/01/2015, 07:50
Avatar de lucasmoadr  
Fecha de Ingreso: marzo-2007
Ubicación: Llavallol, Buenos Aires
Mensajes: 220
Antigüedad: 17 años, 7 meses
Puntos: 5
Respuesta: No reconoce parametro para store procedure

una pregunta, vos estas poniendo esto:
cmd.Parameters.AddWithValue("@CLIENTE_CODIGO", Convert.ToInt32(lblCaj_CliCod.Text.Trim()));

ahi pasa un int32-
pero en el store lo tenes declarado como un nvarchar.
declaralo asi en el store:
@CLIENTE_CODIGO INT = NULL,
__________________
Alquileres en la costa
Se tu mismo
  #5 (permalink)  
Antiguo 29/01/2015, 08:48
 
Fecha de Ingreso: abril-2008
Mensajes: 112
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: No reconoce parametro para store procedure

Ah si,

Es que estaba haciendo varias modificaciones mientras buscaba el error, pero igual lo probé con:

cmd.Parameters.AddWithValue("@CLIENTE_CODIGO", lblCaj_CliCod.Text.Trim());

y tambien probé con
cmd.Parameters.AddWithValue("CLIENTE_CODIGO", lblCaj_CliCod.Text.Trim());

Pero el error es el mismo:
System.Data.SqlClient.SqlException (0x80131904): Procedure or function 'SP_CODCAJAS_CLIENTE' expects parameter '@CLIENTE_CODIGO', which was not supplied

Por eso no me explico que puede ser, es como si el IDE no lo interpretara, pero si compilo por pasos:
https://www.flickr.com/photos/78114420@N03/16393975831/

detecta el valor.


Saludos
  #6 (permalink)  
Antiguo 29/01/2015, 13:01
Avatar de lucasmoadr  
Fecha de Ingreso: marzo-2007
Ubicación: Llavallol, Buenos Aires
Mensajes: 220
Antigüedad: 17 años, 7 meses
Puntos: 5
Respuesta: No reconoce parametro para store procedure

El problema esta en el store. ponele un valor por defecto al parametro de entrada.
Cita:
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

@CLIENTE_CODIGO NVARCHAR(15) = null
__________________
Alquileres en la costa
Se tu mismo

Etiquetas: net, parametro, procedure, reconoce, sql, store
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:19.