我想獲得一個CSV文件導入到一個MySQL表,看到這個線程:Paramaterize文件名
Loading CSV into MySQL Is This a Bug? - File Not Found Exception
我已經想通了,執行命令是拋出異常由於文件名中的雙重間隙。如果我將CSV文件移動到可執行文件所在的位置,並且只提供文件名,則它運行得很好。問題是LOAD DATA語句只接受字符串作爲文件名,按照MySQL文檔。我無法傳遞一個參數,我不知道如何在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')");
我試過這個,它沒有工作。
string tester = files.FirstOrDefault().Directory.ToString();
tester = tester.Replace(@"\\", @"\");