这个问题在这里已经有了答案:
如何在.net mysqlcommand中使用mysql用户定义变量(1个答案)
两年前关门了。
我需要从网络位置下载一个csv文件并将其导入mysql表。最简单的方法是将其复制到mysql位置并使用load数据。我使用以下命令手动完成:
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抱怨日期格式不正确。
因此,由于这将是一个常规操作,我尝试将其放入一个可由进程调用的存储过程中,但不允许在存储过程中使用加载数据。
所以我想我应该使用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:必须定义参数'@postedate'。
有什么办法吗?或者我必须读取csv文件并单独插入记录吗?
1条答案
按热度按时间uelo1irk1#
你有两个选择。
1) 在加载文件之前格式化.csv中的日期。
2) 将该列更改为varchar。加载文件,然后使用str\u to\u date更改为所需的日期格式。如果必须将列类型定义为一,则将其更改回最新。我通常不会把日期字段作为varchar处理。
这两种选择都比你认为最后必须做的要好