我想试试MySqlBulkLoader的性能,因为我使用的Adapter.update((方法大约需要3000万才能运行。我知道你必须通过一个文件才能做到这一点,所以这里是我的代码:
private void button14_Click(object sender, EventArgs e)
{
string fileName = @"C:UsersUtilisateurds.txt";
if (File.Exists(fileName))
{
File.Delete(fileName);
}
using (StreamWriter sw = File.CreateText(fileName))
{
foreach (DataRow row in Globals.ds.Tables[0].Rows)
{
foreach (object item in row.ItemArray)
{
string itemstr = item.ToString();
sw.Write((string)itemstr + "t");
}
sw.WriteLine();
}
}
using (var conn = new MySqlConnection(Globals.connString))
{
conn.Open();
MySqlCommand comm = new MySqlCommand("TRUNCATE Song",conn);
comm.ExecuteNonQuery();
var bl = new MySqlBulkLoader(conn)
{
TableName = Globals.ds.Tables[0].ToString(),
Timeout = 600,
FieldTerminator = "t",
LineTerminator = "n",
FileName = fileName
};
var numberOfInsertedRows = bl.Load();
Console.WriteLine(numberOfInsertedRows);
}
}
文件生成正常。但在var numberOfInsertedRows = bl.Load();
行,我在运行时出现以下错误:
MySql.Data.MySqlClient.MySqlException:'无法获取'/var/packages/MariaDB10/target/MySql/disk/C:\Users\Utilisatur\ds.txt'的stat(错误代码:2"没有这样的文件或目录"('
我试着在fileName中放"/"而不是"\",但同样的错误。
我不知道发生了什么事,有人能帮忙吗?
感谢
默认情况下,MySqlBulkLoader
从服务器的文件系统加载文件。要使用本地文件,请在调用bl.Load()
之前设置bl.Local = true;
。
要启用此功能,您需要在连接字符串中设置AllowLoadLocalInfile = True
;看见https://mysqlconnector.net/troubleshooting/load-data-local-infile/
最后,如果切换到MySqlConnector,则可以使用其MySqlBulkCopy
API直接从DataTable
加载数据,而不是先将其保存到本地CSV文件,然后再加载该文件。