Использование MySqlBulkLoader для загрузки содержимого DataSet: проблема с именем файла - PullRequest
0 голосов
/ 09 апреля 2020

Я хотел бы попробовать производительность MySqlBulkLoader, зная, что метод Adapter.update (), который я использую, требует около 30 минут для запуска. Я понимаю, что вы должны go через файл, чтобы сделать это, поэтому вот мой код:

        private void button14_Click(object sender, EventArgs e)
    {
        string fileName = @"C:\Users\Utilisateur\ds.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 \ Utilisateur \ ds.txt '(код ошибки: 2 "Нет такого файла или каталога")'

Я пытался поместить "/" вместо "\" в fileName но это та же ошибка.

Понятия не имею, что происходит, кто-нибудь может помочь?

Спасибо

1 Ответ

1 голос
/ 09 апреля 2020

По умолчанию MySqlBulkLoader загружает файл из файловой системы сервера. Чтобы использовать локальный файл, установите bl.Local = true; перед вызовом bl.Load().

Чтобы включить это, вам нужно будет установить AllowLoadLocalInfile = True в строке подключения; см. https://mysqlconnector.net/troubleshooting/load-data-local-infile/

Наконец, если вы переключитесь на MySqlConnector , вы можете использовать его MySqlBulkCopy API для загрузки данных непосредственно из DataTable вместо того, чтобы сначала сохранить его в локальном файле CSV, а затем загрузить этот файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...