从C#DataTable批量插入的最佳方法

我有一个DataTable ,我想推送到数据库。 我希望能够说出来

 myDataTable.update(); 

但在阅读MSDN 文档后 ,显然这确实是逐行插入的。

应该注意的是,这些陈述不是作为批处理执行的; 每行都单独更新。

我有什么选择?

编辑:我正在使用SQL Server 2005

如果使用SQL Server, SqlBulkCopy.WriteToServer(DataTable)

  • SqlBulkCopy.WriteToServer方法(DataTable)

或者也可以使用SQL Server,将其写入.csv并使用BULK INSERT

  • BULK INSERT(Transact-SQL)

如果使用MySQL,您可以将其写入.csv并使用LOAD DATA INFILE

  • LOAD DATA INFILE语法

如果使用Oracle,则可以使用ODP.NET的数组绑定function

  • 使用.NET批量插入Oracle

如果是SQLite:

  • 如何使用SQLite批量插入?
  • 在sqlite3中更快的批量插入?
 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); } } 

请注意,数据库表的结构和表名应该相同,否则会引发exception。

这在很大程度上取决于您正在使用的RDBMS,以及该RDBMS是否存在.NET选项。

如果您使用的是SQL Server,请使用SqlBulkCopy类。

对于其他数据库供应商,请专门尝试使用Google搜索。 例如,搜索“.NET Bulk insert into Oracle”发现了一些有趣的结果,包括回到Stack Overflow的这个链接: 使用.NET批量插入Oracle 。

这是我使用DataTable的方法。 这是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 

SqlBulkCopy类最适合SQL服务器,

在C#中将DataTable批量上载/插入SQL服务器中的表