栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

因为我认为性能会很差,所以我不想将DataTable写入CSV文件并使用MySqlBulkLoader类从那里进行插入。

不要根据无根据的假设排除可能的解决方案。我只是测试的从100,000行插入

System.Data.DataTable
使用标准到MySQL表
MySqlDataAdapter#Update()
Transaction
。持续大约需要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:UsersGordDesktopdump.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文件中(使用与此类似的代码),从该文件中批量加载,然后再删除该文件。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号