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

时间:2011-02-16 21:47:10

标签: c# .net-2.0

我想要推送到数据库DataTable。我想能够说像

myDataTable.update();

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

  

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

我的替代方案是什么?

编辑:我正在使用SQL Server 2005

5 个答案:

答案 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)

相关问题