Dictionary parametrisiert in MySQL schreiben

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von simpelSoft.

    Dictionary parametrisiert in MySQL schreiben

    Hallo Leute,

    ich habe einen kleinen Kalender in ASP.NET gebastelt:



    In diesem Kalender können mehrere Tage markiert werden: Urlaub ganzer Tag, Urlaub halber Tag, krank.
    Die markierten Tage werden in ein Dictionary des Types Dictionary<DateTime, Int32> gespeichert. Key ist das Datum, Value ist ein Integer, der den Typ angibt (Urlaub ganzer Tag, Urlaub halber Tag, krank).

    Ich möchte nach einem ButtonClick alle Inhalte des Dictionarys in eine MySQL Datenbank schreiben.
    Dies geht im Prinzip auch schon:

    C#-Quellcode

    1. string constr = "meinConnectionString";
    2. using (MySqlConnection con = new MySqlConnection(constr))
    3. {
    4. using (MySqlCommand cmd = new MySqlCommand("INSERT INTO tbl_urlaub (Tag,Typ) values (?Tag,?Typ);"))
    5. {
    6. foreach (KeyValuePair<DateTime, Int32> dic in meinDictionary)
    7. {
    8. cmd.Parameters.AddWithValue("?Tag", dic.Key);
    9. cmd.Parameters.AddWithValue("?Typ", dic.Value);
    10. cmd.Connection = con;
    11. con.Open();
    12. cmd.ExecuteNonQuery();
    13. con.Close();
    14. cmd.Parameters.Clear();
    15. }
    16. }
    17. }


    Allerdings wird, wie man sieht, bei jedem Durchgang durch das Dictionarys eine Insert-Query gefeuert.
    Dies möchte ich nicht!

    Wie macht man es denn geschickter, das das komplette Dictionary in einem Rutsch in die Datenbank wandert?
    Also das die Query mit ExecuteNonQuery() nur einmal schreiben muss.
    LG
    Du musst soweit ich weiß nicht jedes mal die Connection neu aufbauen.
    Es müsste eigentlich reichen wenn du es so löst:

    C#-Quellcode

    1. string constr = "meinConnectionString";
    2. using (MySqlConnection con = new MySqlConnection(constr))
    3. {
    4. using (MySqlCommand cmd = new MySqlCommand("INSERT INTO tbl_urlaub (Tag,Typ) values (?Tag,?Typ);"))
    5. {
    6. cmd.Connection = con;
    7. con.Open();
    8. cmd.Parameters.add(SqlDbType.datetime, "?Tag"); //genaue Typbezeichnung weiß ich nicht für mysql
    9. cmd.Parameters.add(SqlDbType.int, "?Typ");
    10. foreach (KeyValuePair<DateTime, Int32> dic in meinDictionary)
    11. {
    12. cmd.Parameters("?Tag").Value = dic.Key;
    13. cmd.Parameters("?Typ").Value = dic.Value;
    14. cmd.ExecuteNonQuery();
    15. }
    16. }
    17. }


    mit einem Execute wird das aber denk ich nicht funktionieren.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    mit einem Execute wird das aber denk ich nicht funktionieren.


    Danke Dir.
    Du warst dicht dran - so gehts nach Deiner Vorlage:

    C#-Quellcode

    1. string constr = "meinConnectionString";
    2. using (MySqlConnection con = new MySqlConnection(constr))
    3. {
    4. using (MySqlCommand cmd = new MySqlCommand("INSERT INTO tbl_urlaub (Tag,Typ) values (?Tag,?Typ);"))
    5. {
    6. cmd.Connection = con;
    7. con.Open();
    8. cmd.Parameters.Add("?Tag", MySqlDbType.DateTime);
    9. cmd.Parameters.Add("?Typ", MySqlDbType.Int32);
    10. foreach (KeyValuePair<DateTime, Int32> dic in meinDictionary)
    11. {
    12. cmd.Parameters["?Tag"].Value = dic.Key;
    13. cmd.Parameters["?Typ"].Value = dic.Value;
    14. cmd.ExecuteNonQuery();
    15. }
    16. }
    17. }


    Aber wie Du schon schriebst, "in einem Rutsch" ist das leider auch nicht.
    Hat noch Jemand eine Idee?