2017-08-24 4 views
0

txtファイルからmysqlテーブルにデータを挿入しようとしたときにエラーが発生しました。私はリスト全体を試してみましたが、csvで1つの項目だけを試しましたが、1つのフィールドで新しいテーブルを作成しても問題は解決しませんでした。私のtxtには、テーブルの1つのフィールドに挿入する必要がある数字のリストがありますが、テーブルには3つの異なるフィールドがあります。前もって感謝します。結果セットを読み取ろうとして致命的なエラーが発生しました。 MySQL Asp.Net

protected void Button1_Click(object sender, EventArgs e) 
{ 
    if (FileUploadControl.HasFile) 
    { 
     try 
     { 
      if (FileUploadControl.PostedFile.ContentType == "text/plain") 
      { 

       string filename = Path.GetFileName(FileUploadControl.FileName); 
       FileUploadControl.SaveAs(Server.MapPath("~/") + filename); 
       StatusLabel.Text = "Upload status: File, "+filename+" uploaded!"; 
       string dir = Server.MapPath("~/") + filename; 
       string strcon = "SERVER = 000.000.000.00; " + "DATABASE=fakedb;" + "UID=fakeid;" +"PASSWORD=fakepass;"; 
       Response.Write(dir); 
       MySqlConnection con = new MySqlConnection(strcon); 
       con.Open(); 
       MySqlCommand cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' INTO TABLE Cuenta_Test LINES TERMINATED BY '\n\r'", con); 
       cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
      else 
       StatusLabel.Text = "Upload status: Only txt files are accepted!"; 
     } 
     catch (Exception ex) 
     { 
      StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message; 
     } 
    } 
} 

答えて

0

MySqlCommandコマンドのテキストが正しくないようです。

MySqlCommand cmd = new MySqlCommand("LOAD DATA LOCAL INFILE '" + filename + "' INTO TABLE Cuenta_Test LINES TERMINATED BY '\\n\\r'", con); 

または:それは、この(あなたがC#はエスケープシーケンスとしてラインターミネータを処理しないように二重のバックスラッシュ\\の代わりに、単一のバックスラッシュ\を使用する必要があることに注意してください、それはMySQLのコマンド文字列のために使用される)ようにする必要があります

MySqlCommand cmd = new MySqlCommand(string.Format(@"LOAD DATA LOCAL INFILE '{0}' INTO TABLE Cuenta_Test LINES TERMINATED BY '\n\r'", filename), con); 

NB::読書CSVがデータベースにその内容を保存&提出するときは、また、フィールドの区切りとしてFIELDS TERMINATED BY ','を使用することができ、このようなstring.Format &リテラル文字列を指定して、コマンドのテキストを使用します。あなたが成功したロード・データ命令を確実にするために行うことができます

その他の提案:

1)のMySQL Workbenchで同じコマンドを実行してみてください。間違ったデータ型エラーをチェックします。

2)CommandTimeoutプロパティを使用して、コマンドタイムアウトを増やし:

cmd.CommandTimeout = 120; // 2 minutes (example) 

3)は、データベースに書き込む前に、テキストファイルの行末を正規化します。 \n\rエスケープは、\r\nとは異なります(Replaceを使用します。可能であればエスケープシーケンス正規表現を使用します)。

関連する問題