我正在编写一个程序,通过MySQL处理数据转换,并处理大文件。
我made a question earlier关于我遇到的另一个问题,当我尝试某人的答案时,我收到了以下错误
[MySQL][ODBC 5.3(a) Driver][mysqld-5.5.5-10.1.9-MariaDB]File 'C:\xampp\mysql\data\ingram\' not found (Errcode: 2 "No such file or directory")
我确信该目录存在,当我将代码更改为其原始状态时,它可以正常工作。
那里发生了什么?
这是给我提问题的代码
Cmd.CommandText = String.Format("LOAD DATA INFILE ""{0}"" IGNORE INTO TABLE libros_nueva FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '""' ESCAPED BY '""' LINES TERMINATED BY '\r\n';", filepath)
Cmd.Execute()
任何帮助将不胜感激!
答案 0 :(得分:1)
鉴于错误消息的显着部分:
文件' C:\ xampp \ mysql \ data \ ingram \'找不到(错误代码:2"没有这样的文件或目录")
我很确定在需要完整路径和文件名时只传递路径。它回显的路径中肯定没有文件名。
你可以向我解释一下[MySqlBulkLoader
]吗?
另一种导入方式是使用MySqlBulkLoader
命名空间中的MySql.Data.MySqlClient
:
' columns in the order they appear in the CSV file:
Dim cols As String() = {"Name", "Descr", "`Group`", "ValueA",
"Bird", "Fish", "zDate", "Color", "Active"}
Dim csvFile As String = "C:\Temp\mysqlImport.csv"
Dim rows As Int32
Using dbcon As New MySqlConnection(MySQLConnStr)
Dim bulk = New MySqlBulkLoader(dbcon)
bulk.TableName = "importer"
bulk.FieldTerminator = "," ' this is a CSV
bulk.LineTerminator = "\r\n" ' == CR/LF
bulk.FileName = csvFile ' full file path name to CSV
bulk.NumberOfLinesToSkip = 0 ' has a header?
bulk.Columns.Clear()
For Each s In cols
bulk.Columns.Add(s) ' tell MySQL the order
Next
rows = bulk.Load() ' Make it so.
End Using
导入100k行的次数:3619,2719和2987 ms。根据您的上一个问题,还有一种LoadAsync
方法可能会引起您的兴趣。
如果有数据转换在插入之前执行,CSVHelper
可以提供一种简单的方法来加载记录,这样你就可以做任何需要做的事情,然后使用普通的SQL插入来更新数据库。
部分this answer显示使用CSVHelper
以50k的批量导入Access,这非常快。