valor - La mejor manera de realizar una inserción masiva desde una tabla de datos de C#
valor demasiado grande o demasiado pequeño para un decimal (5)
Así es como lo hago usando un DataTable. Esta es una pieza de trabajo del código TEST.
using (SqlConnection con = new SqlConnection(connStr))
{
con.Open();
// Create a table with some rows.
DataTable table = MakeTable();
// Get a reference to a single row in the table.
DataRow[] rowArray = table.Select();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con))
{
bulkCopy.DestinationTableName = "dbo.CarlosBulkTestTable";
try
{
// Write the array of rows to the destination.
bulkCopy.WriteToServer(rowArray);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}//using
Tengo una DataTable
que quiero enviar a la base de datos. Quiero poder decir como
myDataTable.update();
Pero después de leer los docs MSDN, aparentemente esto inserta fila por fila.
Cabe señalar que estas declaraciones no se realizan como un proceso por lotes; Cada fila se actualiza individualmente.
¿Cuáles son mis alternativas?
Edit: estoy usando SQL Server 2005
Esto dependerá en gran medida del RDBMS que esté utilizando y de si existe una opción .NET para ese RDBMS.
Si está utilizando SQL Server, use la clase SqlBulkCopy .
Para otros proveedores de bases de datos, intente buscar en Google específicamente. Por ejemplo, una búsqueda de ".NET Bulk insert in Oracle" arrojó algunos resultados interesantes, incluido este enlace de nuevo a : Bulk Insert to Oracle utilizando .NET .
La clase SqlBulkCopy es la mejor para el servidor SQL,
Realización masiva de carga / inserción de DataTable en una tabla en el servidor SQL en C #
Si usa SQL Server, SqlBulkCopy.WriteToServer(DataTable)
O también con SQL Server, puede escribirlo en un .csv y usar BULK INSERT
Si usa MySQL, puede escribirlo en un .csv y usar LOAD DATA INFILE
Si usa Oracle, puede usar la función de enlace de matriz de ODP.NET
Si SQLite:
string connectionString= ServerName + DatabaseName + SecurityType;
using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) {
connection.Open();
bulkCopy.DestinationTableName = "TableName";
try {
bulkCopy.WriteToServer(dataTableName);
} catch (Exception e) {
Console.Write(e.Message);
}
}
Tenga en cuenta que la estructura de la tabla de la base de datos y el nombre de la tabla deben ser los mismos o generará una excepción.