2016-04-21 5 views
0

Ich muss mehrere Zeilen von Daten in diesem MySQL mit C# eingeben. enter image description hereDer beste Weg, um mehrere Zeilen in mysql mit C# einzufügen?

Ich habe diesen Code unten für das Einfügen einer Zeile, aber ich bin mir nicht sicher, wie mehrere Zeilen auf einmal zu nähern. Ich muss maximal 8 Zeilen in die Tabelle eingeben. Soll ich mehrere Konstrukteure machen oder gibt es einen besseren Weg?

public class Vo2phases 
{ 
    //properties for vo2max phases 
    public int VO2TestID { get; set; } 
    public int Phase { get; set; } 
    public DateTime Time { get; set; } 
    public int Intensity { get; set; } 
    public double RER { get; set; } 
    public int Borgscale { get; set; } 
    public int Pulse { get; set; } 

    public Vo2phases(int _vo2testid, int _phase, 
        DateTime _time, int _intensity, 
        double _rer, int _borgscale, int _pulse) 
    { 
     //set parameters for phases 
     VO2TestID = _vo2testid; 
     Phase = _phase; 
     Time = _time; 
     Intensity = _intensity; 
     RER = _rer; 
     Borgscale = _borgscale; 
     Pulse = _pulse; 
    } 

    public void addToDB() 
    { 
     try 
     { 
      //prepare for query 
      var cmd = MySQL.readyQuery(); 

      //insert testdata to Vo2test 
      cmd.CommandText = "INSERT INTO vo2phases_tb (Vo2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) VALUES (@Vo2testid, @phase, @time, @intensity, @rer, @borgscale, @pulse);"; 

      cmd.Prepare(); 
      cmd.Parameters.AddWithValue("@vo2testid", VO2TestID); 
      cmd.Parameters.AddWithValue("@phase", Phase); 
      string TimeString = "00:" + Convert.ToString(Time.TimeOfDay.Hours) + ":" + Convert.ToString(Time.TimeOfDay.Minutes); 
      cmd.Parameters.AddWithValue("@time", TimeString); 
      cmd.Parameters.AddWithValue("@intensity", Intensity); 
      cmd.Parameters.AddWithValue("@rer", RER); 
      cmd.Parameters.AddWithValue("@borgscale", Borgscale); 
      cmd.Parameters.AddWithValue("@pulse", Pulse); 

      cmd.ExecuteNonQuery(); 

      cmd.Connection.Close(); 
     } 
     catch (MySqlException ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

    } 

Antwort

1

Ihr Problem ist, dass Sie nur 1 Vo2phase in Ihrem Code erwarten.

Während dies im Konzept oder sogar in der Ausführung kein Problem ist, fehlt es, weil es nicht für die Einreichung einer Sammlung verantwortlich ist.

Ich würde addToDB überladen, so dass es eine Liste als Parameter akzeptiert.

public void addToDB(List<Vo2phase> phases) 
{ 
    try 
    { 
     //prepare for query 
     var cmd = MySQL.readyQuery(); 

     //insert testdata to Vo2test 
     cmd.CommandText = "INSERT INTO vo2phases_tb (Vo2_TestID, Phase, Time, Intensity, RER, Borgscale, Pulse) VALUES (@Vo2testid, @phase, @time, @intensity, @rer, @borgscale, @pulse);"; 

     cmd.Prepare(); 
     foreach (Vo2phase phase in phases) 
     { 
      cmd.Parameters.AddWithValue("@vo2testid", VO2TestID); 
      cmd.Parameters.AddWithValue("@phase", Phase); 
      string TimeString = "00:" + Convert.ToString(Time.TimeOfDay.Hours) + ":" + Convert.ToString(Time.TimeOfDay.Minutes); 
      cmd.Parameters.AddWithValue("@time", TimeString); 
      cmd.Parameters.AddWithValue("@intensity", Intensity); 
      cmd.Parameters.AddWithValue("@rer", RER); 
      cmd.Parameters.AddWithValue("@borgscale", Borgscale); 
      cmd.Parameters.AddWithValue("@pulse", Pulse); 

      cmd.ExecuteNonQuery(); 

      cmd.Parameters.Clear(); 
     } 
     cmd.Connection.Close(); 
    } 
    catch (MySqlException ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

} 

nun die Liste zu erstellen, würden Sie einfach in eine ganze Reihe von Vo2phases hinzufügen:

List<Vo2phase> Phases = new List<Vo2phase> 
{ 
    new Vo2phase(VO2TestID = testId, Phase = i ...), 
    new Vo2phase(VO2TestID = testId, Phase = i ...), 
    new Vo2phase(VO2TestID = testId, Phase = i ...), 
    new Vo2phase(VO2TestID = testId, Phase = i ...), 
    new Vo2phase(VO2TestID = testId, Phase = i ...), 
    new Vo2phase(VO2TestID = testId, Phase = i ...), 
    new Vo2phase(VO2TestID = testId, Phase = i ...) 

    // add the parameters as you normally would. 
}; 

hoffe, das hilft!

0

Mein Ansatz, wenn ich ein hohes Volumen an Einlagen erwarten wäre die addToDB eine statische Methode zu machen, das eine Verbindung und eine Sammlung von Vo2phases nimmt; Sie verlieren so ziemlich jeden Vorteil, und tatsächlich entstehen einige Kosten von prepare, wenn Sie es nur für einzelne Befehlsausführungen verwenden.

Abgesehen davon könnte der vorbereitete Befehl als statische Membervariable verwaltet werden, so dass er nicht ständig neu erstellt wird. Allerdings würden Sie wahrscheinlich etwas Code verwenden, um zu überprüfen, ob der Befehl seit der letzten Verwendung nicht "schlecht gelaufen" ist.

Verwandte Themen