c# – 将DataTable批量复制到MySQL(类似于System.Data.SqlClient.SqlBulkCopy)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 将DataTable批量复制到MySQL(类似于System.Data.SqlClient.SqlBulkCopy),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1823字,纯文字阅读大概需要3分钟。
内容图文
![c# – 将DataTable批量复制到MySQL(类似于System.Data.SqlClient.SqlBulkCopy)](/upload/InfoBanner/zyjiaocheng/890/6801923e44b946e1905a9d33d054e261.jpg)
我正在将我的程序从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()测试了从System.Data.DataTable插入100,000行到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)全部内容,希望文章能够帮你解决c# – 将DataTable批量复制到MySQL(类似于System.Data.SqlClient.SqlBulkCopy)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。