none
Necesito ayuda para eliminar y modificar unos registros :c RRS feed

  • Pregunta

  • Hola a todos, Tengo un problema al programar en C# conectado a BD sqlserver 2008 r2, espero puedan aydudarme estoy estudiando la carrera, así que puede que no sea un gran error.

    tengo una clase form que captura los datos y los envía de esta forma : 

    private void bntEliminar_Click(object sender, EventArgs e)
            {
                try
                {
                    string id = txtEliminar.Text;
                    dataGridView1.DataSource = Datosclientes.Buscar(id);
                    Datosclientes obj1 = new Datosclientes();

                    this.dataGridView1.Columns["Comuna"].Visible = false;
                    this.dataGridView1.Columns["Direccion"].Visible = false;
                    this.dataGridView1.Columns["Telefono"].Visible = false;

                    MessageBoxResult result = System.Windows.MessageBox.Show("¿ Esta seguro de que desea borrar este registro ?", "Confirmación", MessageBoxButton.YesNoCancel);
                    if (result == MessageBoxResult.Yes)
                    {
                        obj1.Rut = id;
                        int resultado = Datosclientes.Eliminar(obj1);
                        if (resultado > 0)
                        {
                            System.Windows.MessageBox.Show("El registro será borrado");
                        }
                        else { System.Windows.MessageBox.Show("No se pudo borrar"); };

                    }
                    else if (result == MessageBoxResult.No)
                    {
                        System.Windows.MessageBox.Show("Ha seleccionado no borrar el registro");
                    }
                    else
                    {
                        System.Windows.MessageBox.Show("Operación Cancelada");
                    }
                }
                catch { FormatException ex; System.Windows.MessageBox.Show("Excepcción "); }
            }

    Por lo demás la clase secundaria Datosclientes posee el metodo Eliminar y es así : 

                

    public static int Eliminar(Datosclientes pdato)
            {
                int retorno;
                SqlConnection Conn = Conexion.getConexion();
                SqlCommand Comand = new SqlCommand(String.Format
           ("DELETE FROM Clientes WHERE Rut = '%{0}%' and Rut is not null", pdato.Rut), Conn);

                retorno = Comand.ExecuteNonQuery();
                Conn.Close();

                return retorno;
                }

    El método conectar está en una clase llamada Conexion, no pudé adjuntar las fotos que quería mostrar. el código correspondiente al datagridview es porque antes de pasar parámetros a Eliminar le paso a Buscar para que me muestre el cliente que borrare en el datagrid, probé omitiendo eso y no era el problema. mi metodo modificar también debe de tener un problema parecido, la respuesta del executeNonquery no llega mayor a 0, cualquier respuesta se las agradecería mucho. Gracias 


    viernes, 9 de mayo de 2014 13:29

Respuestas

  • El problema está en la sentencia SQL:

    "DELETE FROM Clientes WHERE Rut = '%{0}%' and Rut is not null"

    Fíjate que estás buscando un Rut que sea IGUAL que '%...%'. Salvo que tus Rut casualmente empiecen y terminen con el carácter '%', esta condición nunca se cumplirá y por tanto no se borrará ningún registro.

    Si lo que quieres es borrar los registros que CONTENGAN pdato.Rut, entonces tienes que usar el operador LIKE:

    "DELETE FROM Clientes WHERE Rut LIKE '%{0}%'"

    Observa que el "and rut is not null" es superfluo. Si el campo cumple la condición antes indicada, necesariamente ha de ser distinto de NULL, no hace falta recalcarlo en la sentencia.

    viernes, 9 de mayo de 2014 16:03

Todas las respuestas

  • El problema está en la sentencia SQL:

    "DELETE FROM Clientes WHERE Rut = '%{0}%' and Rut is not null"

    Fíjate que estás buscando un Rut que sea IGUAL que '%...%'. Salvo que tus Rut casualmente empiecen y terminen con el carácter '%', esta condición nunca se cumplirá y por tanto no se borrará ningún registro.

    Si lo que quieres es borrar los registros que CONTENGAN pdato.Rut, entonces tienes que usar el operador LIKE:

    "DELETE FROM Clientes WHERE Rut LIKE '%{0}%'"

    Observa que el "and rut is not null" es superfluo. Si el campo cumple la condición antes indicada, necesariamente ha de ser distinto de NULL, no hace falta recalcarlo en la sentencia.

    viernes, 9 de mayo de 2014 16:03
  • Muchas Gracias, me esperaba que el error fuese algo así, se me pasó al crear otros métodos similar. Gracias por tu pronta respuesta. Soy nuevo así que no sé si hay un sistema de puntos, estrellas o algo.  
    viernes, 9 de mayo de 2014 16:13