从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服务器中的表