【问题标题】:MySQL: how to include @ in SQL statement, and it not be interpreted as a parameter? [duplicate]MySQL:如何在 SQL 语句中包含@,并且它不会被解释为参数? [复制]
【发布时间】:2018-07-01 23:42:55
【问题描述】:

我需要从网络位置下载 CSV 文件并将其导入 MySQL 表。最简单的方法是将其复制到 MySQL 位置并使用 LOAD DATA。我是使用这个命令手动完成的:

LOAD DATA INFILE 'Transactions.CSV' 
INTO TABLE tmpImport 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 ROWS 
(AccountDesignator,@PostedDate,SerialNum,Description,Amount,CrDr) 
SET PostedDate = STR_TO_DATE(@PostedDate, '%m/%d/%Y');

我必须添加@PostedDate,因为没有它,MySQL 会抱怨日期格式不正确。

因此,由于这将是常规操作,因此我尝试将其放入可由我的进程调用的存储过程中,但不允许在存储过程中使用 LOAD DATA。

所以我想我只需使用 MySQL Net/Connector 从我的进程发送原始命令:

        using (MySqlCommand cmd = new MySqlCommand(sql, new MySqlConnection("server=theServer; uid=theUid; pwd=thePwd; database=theDatabase; SslMode=none;")))
        {
            cmd.Connection.Open();
            rows = cmd.ExecuteNonQuery();
            cmd.Connection.Close();
        }

但是当我尝试运行它时,我得到了这个错误:

MySqlException:必须定义参数“@PostedDate”。

有没有办法解决这个问题?还是我必须求助于读取 CSV 文件并单独插入记录?

【问题讨论】:

  • 您需要在列标识符周围使用`
  • 所以我试过了。现在我得到 MySqlException: Unknown column '@PostedDate' in 'field list'

标签: c# mysql mysql-connector


【解决方案1】:

你有两个选择。

1) 在加载文件之前格式化 .csv 中的日期。

2) 将该列更改为 varchar。加载文件,然后使用 STR_TO_DATE 更改为所需的日期格式。如果必须将列类型定义为 1,则将其更改回 DATE。将日期字段用作 VARCHAR 时,我通常没有问题。

这两个选项都比你认为你最终可能需要做的更好

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2020-01-19
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多