gpt4 book ai didi

c# - 将 DataTable 批量复制到 MySQL(类似于 System.Data.SqlClient.SqlBulkCopy)

转载 作者:行者123 更新时间:2023-11-29 21:52:25 26 4
gpt4 key购买 nike

我正在将我的程序从 Microsoft SQL Server 迁移到 MySQL。除了批量复制存在一个问题外,一切正常。

在使用 MS SQL 的解决方案中,代码如下所示:

connection.Open();
SqlBulkCopy bulkCopy = new SqlBulkCopy(connection);
bulkCopy.DestinationTableName = "testTable";
bulkCopy.WriteToServer(rawData);

现在我尝试为 MySQL 做类似的事情。因为我认为性能会很差,所以我不想将 DataTable 写入 CSV 文件并使用 MySqlBulkLoader 类从那里进行插入。

任何帮助将不胜感激。

最佳答案

Because I think there would be bad performance I don't want to write the DataTable to a CSV file and do the insert from there with the MySqlBulkLoader class.

不要基于毫无根据的假设排除可能的解决方案。我刚刚测试了使用 Transaction 内的标准 MySqlDataAdapter#Update() 将 100,000 行从 System.Data.DataTable 插入 MySQL 表的情况>。运行时间始终约为 30 秒:

using (MySqlTransaction tran = conn.BeginTransaction(System.Data.IsolationLevel.Serializable))
{
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.Transaction = tran;
cmd.CommandText = "SELECT * FROM testtable";
using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
{
da.UpdateBatchSize = 1000;
using (MySqlCommandBuilder cb = new MySqlCommandBuilder(da))
{
da.Update(rawData);
tran.Commit();
}
}
}
}

(我为 UpdateBatchSize 尝试了几个不同的值,但它们似乎对耗时没有产生重大影响。)

相比之下,使用 MySqlBulkLoader 的以下代码只需要 5 或 6 秒即可运行...

string tempCsvFileSpec = @"C:\Users\Gord\Desktop\dump.csv";
using (StreamWriter writer = new StreamWriter(tempCsvFileSpec))
{
Rfc4180Writer.WriteDataTable(rawData, writer, false);
}
var msbl = new MySqlBulkLoader(conn);
msbl.TableName = "testtable";
msbl.FileName = tempCsvFileSpec;
msbl.FieldTerminator = ",";
msbl.FieldQuotationCharacter = '"';
msbl.Load();
System.IO.File.Delete(tempCsvFileSpec);

...包括将 DataTable 中的 100,000 行转储到临时 CSV 文件(使用类似于 this 的代码)、从该文件批量加载以及随后删除该文件的时间。

关于c# - 将 DataTable 批量复制到 MySQL(类似于 System.Data.SqlClient.SqlBulkCopy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33500321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com