none
Borrar datos de BD mediante Datatable c# RRS feed

  • Pregunta

  • Buenos, dias, tardes, noches, disculpen tengo una interrogante que agradeciere me puedan guiar, necesito borrar los datos de una base de datos VFP, para lo cual en todo mi proyecto e estado ocupando la librería Data.OleDb de c# para la ejecución de consultas SQL, esta librería es muy util para la inserción de datos en bloque asi mismo para la actualización aqui un ejemplo de como se realiza un update:

            private void ActualizarBloque(string sql, DataTable dt)
            {
                try
                {
                    if (dt.Rows.Count != 0)
                    {
                        db.OpenConexion();
                        OleDbDataAdapter adapter = new OleDbDataAdapter();
                        adapter.SelectCommand = new OleDbCommand(sql, db.Conex);
                        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
                        adapter.Update(dt);
                        db.CloseConexion();
                    }

                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    db.CloseConexion();
                }
            }

    Ahora necesito realizar un borrado en bloque con los datos que envió en un datatable: pero al parecer mi método esta mal aplicado o mal estructurado, por favor les agradecería algún consejo o guía, Gracias.

    Este es mi código para eliminar en bloque:

                        db.OpenConexion();
                        OleDbDataAdapter adapter = new OleDbDataAdapter();
                        adapter.SelectCommand = new OleDbCommand(sql, db.Conex);
                        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
                        adapter.DeleteCommand = builder.GetDeleteCommand();
                        adapter.Update(dt);
                        db.CloseConexion();


    • Editado Singledrake jueves, 26 de marzo de 2020 13:35
    jueves, 26 de marzo de 2020 13:32

Respuestas

  • hola

    >>necesito realizar un borrado en bloque con los datos que envió en un datatable

    pero estas marcando las rows del datatable para eliminar, si solo cargaste un datatable con rows y solo hiciste eso y lo envias al Update() no ba hacer nada, tienes que poner las rows en Delete()

    DataRow.Delete Método

    tiene que aplicar el Delete() del datatable en cada row que quieras marcar con un RowState para eliminar y recien alli aplicarlo en el Update() de DataAdapter para que realice la operacion

     Updating the Database Using the Update Method in ADO.NET

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta EricRRModerator jueves, 26 de marzo de 2020 14:56
    • Marcado como respuesta Singledrake jueves, 26 de marzo de 2020 15:56
    jueves, 26 de marzo de 2020 14:05

Todas las respuestas

  • hola

    >>necesito realizar un borrado en bloque con los datos que envió en un datatable

    pero estas marcando las rows del datatable para eliminar, si solo cargaste un datatable con rows y solo hiciste eso y lo envias al Update() no ba hacer nada, tienes que poner las rows en Delete()

    DataRow.Delete Método

    tiene que aplicar el Delete() del datatable en cada row que quieras marcar con un RowState para eliminar y recien alli aplicarlo en el Update() de DataAdapter para que realice la operacion

     Updating the Database Using the Update Method in ADO.NET

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta EricRRModerator jueves, 26 de marzo de 2020 14:56
    • Marcado como respuesta Singledrake jueves, 26 de marzo de 2020 15:56
    jueves, 26 de marzo de 2020 14:05
  • hola

    >>necesito realizar un borrado en bloque con los datos que envió en un datatable

    pero estas marcando las rows del datatable para eliminar, si solo cargaste un datatable con rows y solo hiciste eso y lo envias al Update() no ba hacer nada, tienes que poner las rows en Delete()

    DataRow.Delete Método

    tiene que aplicar el Delete() del datatable en cada row que quieras marcar con un RowState para eliminar y recien alli aplicarlo en el Update() de DataAdapter para que realice la operacion

     Updating the Database Using the Update Method in ADO.NET

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    Comparto la respuesta, puede que a alguien le ayude, en base a lo expuesto por Leandro, lo adecue para mi caso que ocupo Datatables: el metodo quedaria asi:

    sql: es mi consulta SELECT a transformar a DELETE.

    dt: contiene mis registros a borrar

     private void EliminarBloque(string sql, DataTable dt)
            {
                try
                {
                    if (dt.Rows.Count != 0)
                    {
                        db.OpenConexion();
                        OleDbDataAdapter adapter = new OleDbDataAdapter();
                        adapter.SelectCommand = new OleDbCommand(sql, db.Conex);
                        OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
                        adapter.DeleteCommand = builder.GetDeleteCommand();
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            DataRow rows = dt.Rows[i];
                            rows.Delete();
                        }
                        adapter.Update(dt);
                        db.CloseConexion();
                    }
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    db.CloseConexion();
                }
            }

    Nota: cabe recalcar que la conexion la tengo en un metodo.

    Gracias Leandro

    jueves, 26 de marzo de 2020 17:23