【问题标题】:MySQL File or Directory not Found ODBC未找到 MySQL 文件或目录 ODBC
【发布时间】:2016-07-02 18:34:15
【问题描述】:

我正在编写一个通过 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()

任何帮助将不胜感激!

【问题讨论】:

  • 从位置中删除尾随的 \,看看它的作用。
  • 如果您使用 MySql DB 提供程序,您可以使用 MySqlBulkLoader 将这些元素指定为属性。是什么看起来好像缺少文件名?
  • 嗯,第一次听说。我正在阅读 Bulk Loader 的源代码,但不能完全理解它。能给我解释一下吗?
  • 正如@Plutonix 所说,filepath 的价值是什么?我认为您需要传递一个文件名,但从错误消息看来,那里只传递了一个文件夹
  • 当有多个人cets时,您需要在名称中添加@,以便该人被ping通。我只看到这个是因为@Steve(像那样)对我进行了 ping 操作。如果您正在进行转换,批量导入/插入似乎是错误的方法。 CSVHelper 提供了一种非常经济的方式来一次导入 1 个,因此您可以做一些事情。我发现 SQL 导入语法比 MySqlBulkLoader 复杂得多

标签: mysql vb.net file directory


【解决方案1】:

鉴于错误消息的突出部分:

找不到文件'C:\xampp\mysql\data\ingram\' (Errcode: 2 "No such file or directory")

当需要完整路径和文件名时,我很确定您只是传递了一个路径。它回显的路径中肯定没有文件名。


你能解释一下 [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:\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 毫秒。还有一个LoadAsync 方法,考虑到您的最后一个问题,您可能会感兴趣。

如果在插入之前要进行数据转换,CSVHelper 可以提供一种简单的方法来加载记录,这样您就可以做任何需要做的事情,然后使用普通的 SQL 插入来更新数据库。


this answer 的一部分显示使用CSVHelper 以 50k 的批量导入 Access,而且速度非常快。

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2017-09-18
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多