Principales respuestas
Borrar datos de BD mediante Datatable c#

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
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()
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
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()
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
-
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()
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
ArgentinaComparto 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