none
Error con RowDeleting RRS feed

  • Pregunta

  • Resulta que estoy haciendo un sistema con ASP.NET y tengo un gridview que me muestra los productos asociados a un cliente, hasta ahi todo bien, en ese gridview tengo una columna para eliminar reglones, pero cuando aprieto el boton me marca el error "Stored procedure has too many arguments specified" y segun yo estoy pasando los parametros justos que puse en el Procedure

    Este es mi codigo del RowDeleting

    protected void gvProductosAsociados_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                SqlCommand cmd = new SqlCommand("borrarProducto", conexion);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@codigo", SqlDbType.NVarChar).Value = gvProductosAsociados.DataKeys[e.RowIndex].Value;
                }
                conexion.Open();
                cmd.ExecuteNonQuery();
                conexion.Close();
                gvProductosAsociados.EditIndex=-1;
            }
    Y este es mi StoredProcedure
    GO
    CREATE PROCEDURE borrarProducto
    	@codigo NVARCHAR(50)
    AS
    BEGIN
    	DELETE FROM ProductosAsociados WHERE (prod_codigo = @codigo)
    END
    RETURN

    Ojala puedan ayudarme por que la verdad no tengo idea de cual sea el error

    miércoles, 18 de noviembre de 2015 18:30

Respuestas

  • El método AddWithValue recibe como segundo argumento el valor a asignar al parámetro, no el tipo de datos.

                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@codigo", SqlDbType.NVarChar)
                    cmd.Parameters["@código"].Value = gvProductosAsociados.DataKeys[e.RowIndex].Value;
    

    Si te sigue dando problemas depura y asegúrate de que gvProductosAsociados.DataKeys[e.RowIndex].Value tiene algún valor.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 18 de noviembre de 2015 18:39

Todas las respuestas

  • Me parece raro, por que no intentas poner un ToString() despues del value en donde recuperas el valor de tu GV:

    cmd.Parameters.AddWithValue("@codigo", SqlDbType.NVarChar).Value = gvProductosAsociados.DataKeys[e.RowIndex].Value.ToString();
                
    Bueno te sugiero eso porque el Value devuelve un dato tipo object.


    miércoles, 18 de noviembre de 2015 18:38
  • El método AddWithValue recibe como segundo argumento el valor a asignar al parámetro, no el tipo de datos.

                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.Add("@codigo", SqlDbType.NVarChar)
                    cmd.Parameters["@código"].Value = gvProductosAsociados.DataKeys[e.RowIndex].Value;
    

    Si te sigue dando problemas depura y asegúrate de que gvProductosAsociados.DataKeys[e.RowIndex].Value tiene algún valor.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 18 de noviembre de 2015 18:39
  • hola

    porque defines el dataadapter entre parentesis ? es mas para que defines el dataadapter

    porque no solo

    conexion.Open();
    
    SqlCommand cmd = new SqlCommand("borrarProducto", conexion);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@codigo", gvProductosAsociados.DataKeys[e.RowIndex].Value);
    
    cmd.ExecuteNonQuery();
    
    conexion.Close();
    
    gvProductosAsociados.EditIndex=-1;



    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 18 de noviembre de 2015 19:04
  • Antes que nada muchas gracias a los 3, he probado la opción que me dio Leandro pero ahora me da otro error

    "La acción de eliminar no es compatible con el origen de datos 'SqlProductosAsociados' a menos que se especifique DeleteCommand." 

    y pues el lo mismo, es el único gridview que me marca ese error, gracias de nuevo

    jueves, 19 de noviembre de 2015 14:15
  • Pero ¿le has hecho caso a Leandro y has quitado el SqlDataAdapter?

    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    jueves, 19 de noviembre de 2015 17:00
  • claro que lo hice, por eso especifique que había probado con esa solución que el me dio y me arrojo ese error, ahora ya note que me manda ese error pero cuando checo en la base de datos si elimina el dato en cuestion
    jueves, 19 de noviembre de 2015 18:52