INSERT in MySQL-DB mit Parametern
-
Hallo,
ich habe wieder ein Problem.
Auf meiner WindowsForm habe ich mehrere Textfelder. Diese sollen vom User ausgefüllt und in die DB gespeichert werden.
Nicht alle Felder sind Textfelder und können daher auch null haben.Daher habe ich etwas in der Art versucht:
MySqlCommand cmd = new MySqlCommand("INSERT INTO tblartikel (ArtikelID, Bezeichnung, Bemerkung) VALUES('123', 'Text', '@bem');", conn); MySqlDataAdapter da = new MySqlDataAdapter(cmd); DataSet ds = new DataSet("tblartikel"); if (txtNeuBemerkung.Text == null || txtNeuBemerkung.Text == "") cmd.Parameters[0].Value = DBNull.Value; else cmd.Parameters[0].Value = (string)txtNeuBemerkung.Text;
Leider stehe ich etwas auf dem Schlauch und weiß nicht mal, ob es in dieser Art überhaupt funktionieren wird.
Oder wäre ein case eine Lösung?Bisher habe ich immer für jede Prüfung (null oder "") eine extra Abfrage gemacht, halte das aber für viel zu umständlich, vor allem wenn mal etwas am SQL-Befehl geändert werden muss.
Kann mir bitte jemand helfen, ob ich total auf dem Holzweg bin, oder was ein guter Ansatz wäre. DANKE!
-
Wenn es rein um die If-Abfrage geht, kannst du die wiefolgt verkürzen
if(sring.IsNullOrEmpty(textBemerkung.Text)) //mache was
-
Um die if-Abfrage geht es mir auch, mein Hauptproblem ist aber etwas anderst (weiß nur nich tgenau wie ausdrücken).
Ich habe 3 Textfelder (txt1, txt2, txt3) die alle keine Pflichtfelder sind.
Nun soll, falls der Nutzer etwas eingetragen hat natürlich der Eintrag gespeichert werden, andernfalls null.Das würde ja jedes mal wie folgt aussehen:
if (string.IsNullOrEmpty(txt1.Text)) { txt1.Text = null; INSERT INTO ... } else { INSERT INTO ... } if (string.IsNullOrEmpty(txt2.Text)) { txt2.Text = null; INSERT INTO ... } else { INSERT INTO ... }
Ich hoffe so wird es klarer, was ich "kürzen" möchte ...
-
1. Es gibt Funktionen.
2. Was meinst du mit denINSERT INTO
?
3. Wieso setzt du denText
jeweils aufnull
?Grüssli
-
oder brütal
cmd.Parameters[0].Value = (String.IsNullOrEmpty(txt1.Text))? DBNull.Value: txt1.Text; cmd.Parameters[1].Value = (String.IsNullOrEmpty(txt2.Text))? DBNull.Value: txt2.Text; cmd.Parameters[2].Value = (String.IsNullOrEmpty(txt3.Text))? DBNull.Value: txt3.Text;
-
witte schrieb:
oder brütal
cmd.Parameters[0].Value = (String.IsNullOrEmpty(txt1.Text))? DBNull.Value: txt1.Text; cmd.Parameters[1].Value = (String.IsNullOrEmpty(txt2.Text))? DBNull.Value: txt2.Text; cmd.Parameters[2].Value = (String.IsNullOrEmpty(txt3.Text))? DBNull.Value: txt3.Text;
Mir ist gerade eingefallen dass operator ?: zwei Ausdrücke desselben Typs verlangt. Also den String vllt nach object casten oder in einer Funktion kapseln.
-
Guten Morgen,
ich habe einen neuen Versuch gestartet - so würde ich es mir auch vorstellen, nur leider wird mein Wert aus dem Textfeld noch nicht in der DB gespeichert.
MySqlParameter para = new MySqlParameter("@text", MySqlDbType.VarChar, 255); para.Value = txt1.Text; string sqlInsert = "INSERT INTO tblartikel (artikelid, bemerkung_artikel) VALUES ('123',@text)"; conn.Open(); MySqlCommand cmd = new MySqlCommand(sqlInsert, conn); if (string.IsNullOrEmpty(txt1.Text)) { para.Value = DBNull.Value; } else { para.Value = txt1.Text; cmd.Parameters.Add("@text", MySqlDbType.VarChar, 255); } cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); conn.Close();
Meine Artikelnummer wird eingetragen, mein anderer Wert allerdings nicht.
Woran liegt das? Bzw. was mache ich falsch?
-
So einiges -) Du verwendest erst einen lokalen Parameter (ohne ihn dem Command hinzuzufügen), danach fügst du einen dazu, setzt aber den Wert nicht.
Lies dir mal diesen Artikel bzgl. "Parameter von SQL Befehlen" dazu durch: http://www.mycsharp.de/wbb2/thread.php?threadid=66704
-
@Th69
Danke für den Link!Hier meine Lösung:
const string cmd = "INSERT INTO tblartikel (artikelID, Bemerkung) Values (?p1, ?p2)"; MySqlCommand insertCommand = new MySqlCommand(cmd, conn); insertCommand.Parameters.AddWithValue("?p1", 123); if (string.IsNullOrEmpty(txt1.Text)) { insertCommand.Parameters.AddWithValue("?p2", null); } else { insertCommand.Parameters.AddWithValue("?p2", txt1.Text); } conn.Open(); insertCommand.ExecuteNonQuery();