none
Borrar registros a travez de un Gridview utilizando procedimientos almacenados RRS feed

  • Pregunta

  • Hola amigos saludos, estoy realizando mi aplicacion en C# con la version del framewrok 3.5, visual studio 2010 y sql server 2008.

    Les comento tengo una base de datos que se llama BD_Credenciales ahi tengo una tabla donde guardo todos mis registros de mi formulario que se llama Operacion_Alumnos en esta tabla tengo una campo matricula que es un char(9) y es mi llave principal.

    Entonces para deplegar mi consulta de la tabla Operacion_Alumnos utilizo un gridview que se llama Gdv_Alumnos aqui utilizo la configuracion del Configure Data Source y en el asistente en la parte de Configure de Select Statement selecciono la opcion de Specify a custom SQL statement or stored procedure para manda llamar mi procedimiento en la parte de DELETE.

    Mi store procedure se llama sp_BorrarAlu y este contiene el siguiente codigo;

    ALTER PROCEDURE [dbo].[sp_BorrarAlu]
      @matricula AS char(9)
    AS
    BEGIN
     DELETE FROM [Operacion_Alumnos] WHERE [OAReg_Matricula] = @matricula;
    END

    Entonces al ejecutar  mi procedimiento almacenado directamente en la administrador de la base de datos me funciona correctamente, el problema es que cuando ejecuto mi aplicacion de c# al momento de que le doy click en el boton de borrar desde el gridview me manda el siguiente error

    Server Error in '/WEB-CREDENCIALES' Application.

    Procedure or function sp_BorrarAlu has too many arguments specified.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.SqlClient.SqlException: Procedure or function sp_BorrarAlu has too many arguments specified.

    Source Error:

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    ¿Alguien me puede indicar si es correcto lo que estoy haciendo o esta mal mi procedimiento almacenado o de que otra manera puedo realizar esta accion?

    jueves, 8 de marzo de 2012 16:32

Todas las respuestas

  • Como llamas al procedimiento almacenado? Porque parece que no le estás mandando bien los parámetros que recibe.

    Un saludo!

    jueves, 8 de marzo de 2012 16:49
  • El procedimiento lo mando llamar desde el asistente pero no entiendo muy bien de como mandar llamar los parametros.

    Pero si lo hago a tarvez donde ser escriben directamente las sentencias escribo lo siguiente;

    DELETE FROM [Operacion_Alumnos] WHERE OAReg_Matricula = @matricula;

    Pero no me manda error solo actualiza la pagina pero no me ningun registro.

    jueves, 8 de marzo de 2012 17:01
  • Pues desde ese asistente tienes que indicar el parámetro, date cuenta de que el procedimiento almacenado necesita recibir un parámetro, que quizás no le estés mandando.

    Un saludo!

    jueves, 8 de marzo de 2012 17:14
  • como estas ejecutando el procedure ? usas parametros

    algo como ser

    using (SqlConnection conn = new SqlConnection("connectionstring"))
    {
    
        SqlCommand cmd = new SqlCommand("sp_BorrarAlu", conn);
        cmd.CommandType = SqlCommandType.StoredProcedure;
    
    	 cmd.Parameters.Clear();
    	 cmd.Parameters.AddWithValue("@matricula", txtMatricula.Text);
    
    	 cmd.ExecuteNonQuery();
    
    }

    sino es parecido a esto lo que usas, entocnes alli esta le problema

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    jueves, 8 de marzo de 2012 17:28
  • Hola Leandro,

    Veo que aunque nos preocupamos de poner en marcha buenas practicas y una es el no uso de AddWithValue con cadenas tu lo sigues proponiendo :(. Eres invencible.

    Mira de nuevo el link por si algo no te quedo claro.

    http://social.msdn.microsoft.com/Forums/es-ES/vcses/thread/c691d4cc-1a00-4a5f-9829-2cc7dfd75c1e 

    Saludos,


    phurtado

    jueves, 8 de marzo de 2012 20:17
    Moderador
  • Podrias Resolverlo con lo que te propone el Compañero @Leandro, pero de verdad que me da mucha pena ver como algo que hace solo dos dias se debatio en este foro puede seguir siendo pan nuestro de cada dia

    using (SqlConnection conn = new SqlConnection("connectionstring"))
    {

       
    SqlCommand cmd = new SqlCommand("sp_BorrarAlu", conn);
        cmd
    .CommandType = SqlCommandType.StoredProcedure;

    //cmd
    .Parameters.Clear();
    //Esto da Problemas y mas si es con string  - cmd
    .Parameters.AddWithValue("@matricula", txtMatricula.Text);
    cmd.Parameters.Add("@matricula", SqlDbType.Varchar, tamaño en INT del campo
    OAReg_Matricula en la Base de Datos).Value = txtMatricula.Text

    try

    {

         cmd.ExecuteNonQuery();

    }

    catch(exeption)

    {}

    }

    con esto resuelves eso pero de verdad que me da pena :( lo del AddWithValue()

    Saludos


    Luis Y. Ramirez "Recuerda marcar la repuesta como VALIDA si te ha ayudado"

    jueves, 8 de marzo de 2012 21:16
  • vuelvo a mencionar, use durante años el AddWithValue() sin problema alguno de rendimiento

    porque ahora año 2012 (ado.net existe desde que nacio .net alla en el 2001) se propone un articulo, que surgio de un comentario, se debe cambiar todo

    es como que alguien viene y dice, bueno bueno miren este articulo la teoria de la relatividad ya no funciona y todos lo tenemos que aceptar a rajatabla, si quieren que deje de usar AddWithValue() que microsoft lo quite de ado.net o le ponga el atributo Obsolete

    si Microsoft lo deja es para que se use, sino fuera buena idea suarlo ya lo hubiera quitado, no me van a decir que ellos nunca se dieron cuenta de este problema y no lo solucionaron

    no tengo que mirar el link, lo vi lo entendi y esta muy bueno para tenerlo en cuenta, pero eso no me cambia nada

    PD, porque no se revisan el resto de los foros y van a ver como se usa esto mismo a distra y siniestra, ahh pero al resto no le dicen nada, no

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina





    jueves, 8 de marzo de 2012 22:42