Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL LOAD DATA File语句中的Paramaterize文件名_C#_Mysql - Fatal编程技术网

C# SQL LOAD DATA File语句中的Paramaterize文件名

C# SQL LOAD DATA File语句中的Paramaterize文件名,c#,mysql,C#,Mysql,我正在尝试将CSV文件放入MySQL表中,请参见以下线程: 我发现执行该命令会引发异常,因为文件名中存在双重反冲。如果我将CSV文件移动到可执行文件所在的位置,并且只提供文件名,那么它运行正常。问题是,根据MySQL文档,LOAD DATA语句只接受文件名的字符串。我无法传递参数,而且我不知道如何在C#中指定字符串中的“\”而不首先转义它。我正在使用String.Format()构建命令字符串。我尝试了String.Format(@“”)两种格式,但没有@,两种格式都不起作用。有人有什么建议吗

我正在尝试将CSV文件放入MySQL表中,请参见以下线程:

我发现执行该命令会引发异常,因为文件名中存在双重反冲。如果我将CSV文件移动到可执行文件所在的位置,并且只提供文件名,那么它运行正常。问题是,根据MySQL文档,LOAD DATA语句只接受文件名的字符串。我无法传递参数,而且我不知道如何在C#中指定字符串中的“\”而不首先转义它。我正在使用String.Format()构建命令字符串。我尝试了String.Format(@“”)两种格式,但没有@,两种格式都不起作用。有人有什么建议吗?我搜索了论坛,找到了一个PHP示例,想知道是否有适合C#的东西

下面是我现在的代码,其中InputFileListView是用户选择加载到数据库中的文件列表。问题在于任何访问文件路径信息的ToString()方法都会将\放入字符串中。这会导致执行命令时出现问题

IEnumerable<FileInfo> files = this.InputFileListView.Items.Cast<FileInfo>();

 // just using the first entry in InputFileListView for now
string working = String.Format("LOAD DATA LOCAL INFILE '{0}' IGNORE", files.FirstOrDefault().ToString()) +
                         String.Format("INTO TABLE {0} COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\n'", "by_switch")+
                         String.Format("IGNORE 1 LINES (`Switch`,`Port`,`WWPN`,@the_slot,`Port Index`,@the_time,`Interval`,`Port Send Packet Rate`,")+
                         String.Format("`Port Receive Packet Rate`,`Total Port Packet Rate`,`Port Send Data Rate`,")+        
                         String.Format("`Port Receive Data Rate`,`Total Port Data Rate`,`Port Peak Send Data Rate`,`Port Peak Receive Data Rate`,")+ 
                         String.Format("`Port Send Packet Size`,`Port Receive Packet Size`,`Overall Port Packet Size`,`Error Frame Rate`,")+
                         String.Format("`Dumped Frame Rate`,`Link Failure Rate`,`Loss of Sync Rate`,`Loss of Signal Rate`,`CRC Error Rate`,")+
                         String.Format(" `Short Frame Rate`,`Long Frame Rate`,`Encoding Disparity Error Rate`,")+         
                         String.Format("`Discarded Class3 Frame Rate`,`F-BSY Frame Rate`,`F-RJT Frame Rate`, `Port Send Bandwidth Percentage`,")+
                         String.Format("`Port Receive Bandwidth Percentage`, Overall Port Bandwidth Percentage`,`Primitive Sequence Protocol Error Rate`,")+
                         String.Format("`Invalid Transmission Word Rate`,`Link Reset Transmitted Rate`,`Link Reset Received Rate`)")+ 
                          String.Format("SET Slot = nullif(@the_slot,''),")+ 
                          String.Format(@"Time= str_to_date(@the_time,'%m/%d/%y %h:%i %p')");

我没有找到这个问题的答案,但我找到了一个解决办法。我想用BulkLoader做的是:

var bl = new MySqlBulkLoader(sqlconnect);
      bl.TableName = "by_switch";
      bl.FieldTerminator = ",";
     bl.LineTerminator = "\n";
      bl.FileName = files.FirstOrDefault().ToString();
       bl.NumberOfLinesToSkip = 1;
    int inserted = bl.Load();
var bl = new MySqlBulkLoader(sqlconnect);
      bl.TableName = "by_switch";
      bl.FieldTerminator = ",";
     bl.LineTerminator = "\n";
      bl.FileName = files.FirstOrDefault().ToString();
       bl.NumberOfLinesToSkip = 1;
    int inserted = bl.Load();