2017-08-24 4 views
0

Ich erhalte diesen Fehler, als ich versuchte, Daten aus einer TXT-Datei in eine MySQL-Tabelle einzufügen. Ich versuchte mit der ganzen Liste, mit nur 1 Element, mit CSV, sogar das Entfernen der "" und Erstellen einer neuen Tabelle mit nur einem Feld, aber das Problem weiterhin nach 30 Sekunden. In meinem txt habe ich eine Liste von Zahlen, die ich in 1 Feld der Tabelle einfügen muss, obwohl die Tabelle drei verschiedene Felder hat. Vielen Dank im Voraus.Schwerwiegender Fehler beim Versuch, das Resultset zu lesen. 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; 
     } 
    } 
} 

Antwort

0

Scheint, dass Ihr MySqlCommand Befehlstext falsch ist. Es sollte so sein (beachten Sie, dass Sie \ Doppel Backslash \\ statt einzelner Schrägstrich verwenden müssen, so dass C# nicht den Leitungsabschluss als Escape-Sequenzen behandeln, ist es für MySQL Befehlsfolge verwendet):

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

Or Befehlstext mit string.Format & Zeichenkette wie folgt verwenden:

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

NB: Sie können auch FIELDS TERMINATED BY ',' als Feldtrennzeichen verwenden können, wenn CSV & speichern den Inhalt zu Datenbank-Datei zu lesen.

Andere Vorschläge, die Sie tun können, erfolgreich Belastungsdaten Befehl, um sicherzustellen:

1) Nutzen Sie den gleichen Befehl in MySQL Workbench ausgeführt wird. Auf fehlerhafte Datentypfehler prüfen.

2) Befehl Timeout mit CommandTimeout Eigenschaft erhöhen:

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

3) Normalisieren Zeilenende der Textdatei vor, um Datenbank zu schreiben. \n\r Escapezeichen unterscheiden sich von \r\n (mit Replace, möglicherweise mit Escape-Sequenz regex).

Verwandte Themen