【发布时间】:2012-09-24 01:48:23
【问题描述】:
我正在尝试将 CSV 文件加载到 C# 中的 MySQL 数据库中,但我不断收到无法从结果集中读取的异常。我在 MySQL 工作台中清理了语法,以至于我可以将 CSV 文件加载到 MySQL 工作台的数据库中而没有错误。在我的程序中尝试它,我仍然得到异常。我正在使用的文件具有以下路径和文件名:
D:\SANCentral\Customer Files\ibm\70738\0918\switch port.csv
我得到的异常是“无法从结果集中读取”。查看内部异常,我得到文件未找到。我不知道那是从哪里来的。 D:\Projects\CSVParser 是我的项目的位置。我假设 MySQL.Data.Client 类正在使用我给它的位置来打开文件。这显然是 SQL 命令试图从中加载文件的路径:
{"Could not find file 'D:\\Projects\\CSVParser\\CSVParser\\bin\\Debug\\SANCentralCustomer Filesibm70738'
.":"D:\\Projects\\CSVParser\\CSVParser\\bin\\Debug\\SANCentralCustomer Filesibm70738"}
我该如何解决这个问题?我在调试器中检查了要解析的文件的路径,它是正确的。我尝试将 .CSV 文件移动到从中运行项目的项目目录中,但仍然出现异常,但它是路径中的非法字符,而不是找不到文件。
这是执行加载的 C# 代码和 MySQL 语句:
string ConnectionString = String.Format(@"server=localhost;userid={0};
password={1};database=PerformanceMonitors;
Allow User Variables=True", user,password);
MySqlConnection sqlconnect = new MySqlConnection(ConnectionString);
sqlconnect.Open();
这是 MySQL 语句并执行查询。抱歉,字符串有点长:
string working = String.Format(@"LOAD DATA LOCAL INFILE '{0}' IGNORE
INTO TABLE {1} COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\n'
IGNORE 1 LINES (`Switch`,`Port`,`WWPN`,@the_slot,`Port Index`,@the_time,
`Interval`,`Port Send Packet Rate`,
`Port Receive Packet Rate`,`Total Port Packet Rate`,`Port Send Data Rate`,
`Port Receive Data Rate`,`Total Port Data Rate`,
Peak Send Data Rate`,`Port Peak Receive Data Rate`,
Port Send Packet Size,Port Receive Packet Size,Overall Port Packet Size,Error Frame Rate,Dumped Frame Rate,Link Failure Rate,Loss of Sync Rate,Loss of Signal Rate,CRC Error Rate344@98764 @,Long Frame Rate,Encoding Disparity Error Rate,Discarded Class3 Frame Rate,F-BSY Frame Rate,F-RJT Frame Rate,Port Send Bandwidth Percentage,Port Receive Bandwidth Percentage,
Overall Port Bandwidth Percentage,Primitive Sequence Protocol Error Rate,Invalid Transmission Word Rate,Link Reset Transmitted Rate,Link Reset Received Rate)
SET Slot = nullif(@the_slot,''), Time= str_to_date(@the_time,'%m/%d/%y %h:%i %p')", files.FirstOrDefault().ToString(), "by_switch");
string commandreplaced= working.Replace("\n", "");
MySqlCommand cmd = new MySqlCommand(commandreplaced,sqlconnect);
cmd.ExecuteNonQuery();
【问题讨论】:
-
哦,我可以使用 OLEDB 将文件加载到数据表中,所以我知道文件路径没问题。我认为这是 MySQL.Data 库的问题,我只是不知道如何解决它。