我正在编写一个程序,该程序通过MySQL处理数据转换,并处理大文件。
我早些时候提出了一个关于我遇到的另一个问题的问题,当我尝试别人的答案时,我得到了以下错误
[MySQL][ODBC 5.3(a) Driver][mysqld-5.5.5-10.1.9-MariaDB]File 'C:xamppmysqldataingram' 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 'rn';", filepath)
Cmd.Execute()
任何帮助都将不胜感激!
给定错误消息的显著部分:
找不到文件"C:\examplep\mysql\data\ingram\'"(错误代码:2"没有这样的文件或目录"(
我敢肯定,当需要完整的路径和文件名时,您只传递了一个路径。它回显的路径中肯定没有文件名。
你能给我解释一下[MySqlBulkLoader
]吗
另一种导入方式是使用MySql.Data.MySqlClient
命名空间中的MySqlBulkLoader
:
' 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:TempmysqlImport.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 = "rn" ' == 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毫秒。考虑到您的最后一个问题,还有一个可能感兴趣的LoadAsync
方法。
如果在插入之前需要进行数据转换,CSVHelper
可以提供一种加载记录的简单方法,这样您就可以执行任何需要执行的操作,然后使用普通的SQL插入来更新数据库。
这个答案的一部分显示了使用CSVHelper
以50k的批量导入Access,这非常快。