我想要推送到数据库DataTable
。我想能够说像
myDataTable.update();
但在阅读MSDN docs后,显然这确实是逐行插入的。
应该注意的是,这些陈述不是作为批处理执行的;每行都单独更新。
我的替代方案是什么?
编辑:我正在使用SQL Server 2005
答案 0 :(得分:47)
如果使用SQL Server,SqlBulkCopy.WriteToServer(DataTable)
或者使用SQL Server,您可以将其写入.csv并使用BULK INSERT
如果使用MySQL,您可以将其写入.csv并使用LOAD DATA INFILE
如果使用Oracle,you can use the array binding feature of ODP.NET
如果是SQLite:
答案 1 :(得分:8)
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);
}
}
请注意,数据库表的结构和表名应该相同,否则会引发异常。
答案 2 :(得分:4)
这在很大程度上取决于您正在使用的RDBMS,以及该RDBMS是否存在.NET选项。
如果您使用的是SQL Server,请使用SqlBulkCopy类。
对于其他数据库供应商,请专门尝试使用Google搜索。例如,搜索“.NET Bulk insert into Oracle”会发现一些有趣的结果,包括回到Stack Overflow的链接:Bulk Insert to Oracle using .NET。
答案 3 :(得分:3)
这是我如何使用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
答案 4 :(得分:0)
SqlBulkCopy类最适合SQL服务器,
Doing Bulk Upload/Insert of DataTable to a Table in SQL server in C#