我有一个非常大的表,在 ac# datatable 中有大约 1,000,000 行数据,我想将它上传到 mysql db 表中。最好和最快的方法是什么?
遍历行并一次上传一行看起来是非常糟糕的性能明智,并且有时还会引发超时异常。
我知道其中一种解决方案是将其写入文件并使用 mysqlbulkloader 从文件中读取。有没有其他方法可以直接从数据表到数据库?
我有一个非常大的表,在 ac# datatable 中有大约 1,000,000 行数据,我想将它上传到 mysql db 表中。最好和最快的方法是什么?
遍历行并一次上传一行看起来是非常糟糕的性能明智,并且有时还会引发超时异常。
我知道其中一种解决方案是将其写入文件并使用 mysqlbulkloader 从文件中读取。有没有其他方法可以直接从数据表到数据库?
非通用解决方案以使用StringBuilder
. 我已经为 MSSQL 2008 使用了这样的解决方案,因此它可能对您有用。
string _insertQuery(IEnumerable<Item> datatable) {
sb.Append("INSERT INTO table (coltext, colnum, coltextmore) VALUES ");
foreach (var i in datatable) {
sb.AppendFormat("('{0}', {1}, '{2}'),",
new object[] { i.ColText, i.ColNum, i.ColTextMore });
}
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
}
您将(可能)需要一种方法来翻阅 1,000,000 行:
var lst = new List<Item>();
// ...
for (int i = 0; i < datatable.Count; i += 1000) {
_insertQuery(lst.RangeOf(i, 1000);
}
RangeOf()
是IList
我通过列表编写的扩展名:
public static IList<T> RangeOf<T>(this IList<T> src, int start, int length) {
var result = new List<T>();
for (int i = start; i < start + length; i++) {
result.Add(src[i]);
}
return result;
}