[MYSQL] Probleme mit StoredProcedure
-
Hallo zusammen,
ich schreibe grad eine Testanwendung in C# die eine
StoredProcedure
auf einem MySql-Server aufrufen soll.
Leider bekomme ich immer folgende FM:Incorrect number of arguments for PROCEDURE kontakt.INSERT_benutzer; expected 6, got 1
Kann mir jemand sagen, was ich falsch mache?
Das ist mein Code:MySqlConnection conn = new MySqlConnection(); MySqlCommand insert = new MySqlCommand(); insert.CommandText = "INSERT_benutzer"; insert.CommandType = CommandType.StoredProcedure; conn.ConnectionString = string.Format("Database={0};Data Source={1};User Id={2};Password={3}", "DATENBANK", "test", "X", "X"); try { conn.Open(); insert.Connection = conn; insert.Parameters.AddWithValue("?vname", txtVorname.Text); insert.Parameters.AddWithValue("?nname", txtNachname.Text); if (txtMaedchenname.Text.Equals("")) { insert.Parameters.AddWithValue("?mname", ""); } else { insert.Parameters.AddWithValue("?mname", txtMaedchenname.Text); } insert.Parameters.AddWithValue("?birthday", Geburtstag.Value.ToString("yyyy-MM-dd")); if (cbMaster.Checked) { insert.Parameters.AddWithValue("?srv", ""); insert.Parameters.AddWithValue("?modus", 2); } else { insert.Parameters.AddWithValue("?srv", "wolfi"); insert.Parameters.AddWithValue("?modus", 1); } for (int i = 0; i < insert.Parameters.Count; i++) { insert.Parameters[i].Direction = ParameterDirection.Input; } insert.ExecuteNonQuery(); } catch (MySqlException ex) { MessageBox.Show(ex.ToString()); } catch (Exception ex) { MessageBox.Show(ex.ToString()); }
Vielen Dank
Waldemar
-
Ich denke dass die Parameter auch im Insert-Befehl angegeben werden müssen sonst weiß er die Reihenfolge ja nicht::
"INSERT_benutzer(?vname,?nname,...)";
-
witte schrieb:
Ich denke dass die Parameter auch im Insert-Befehl angegeben werden müssen sonst weiß er die Reihenfolge ja nicht::
"INSERT_benutzer(?vname,?nname,...)";Hallo witte,
vielen dank für die schnelle Antwort.
leider bekomme ich bei deinem Lösungsansatz dieseProcedure or function 'INSERT_benutzer(?nname, ?vname, ?mname, ?birthday, ?modus, ?srv)' cannot be found in database 'DATENBANK'.
Fehlermeldung.
Grüße
Waldemar
-
Hat denn keiner eine Idee, was ich falsch mache?
Grüße
Waldemar
-
http://forums.asp.net/p/988462/1309349.aspx#1309349
Schau mal hier.Eventuell solltest du direkt eine Insert-Procedure erstellen und ihr dann wie in dem Beispiel die Parameter übergeben.
Wichtig ist dieser Part hier:
public static void InsertMessage(MessageItem MessageItem) { MySqlCommand cmd = new MySqlCommand("InsertMessage", new MySqlConnection(GetConnectionString()));//hier ruft er die Procedure auf, welche weiter oben in MySQL deklariert wurde. cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Name)); cmd.Parameters.Add(new MySqlParameter("param2", MessageItem.Email)); cmd.Parameters.Add(new MySqlParameter("param3", MessageItem.Message)); cmd.Connection.Open(); cmd.ExecuteNonQuery(); cmd.Connection.Close(); }
-
Firefighter schrieb:
http://forums.asp.net/p/988462/1309349.aspx#1309349
Schau mal hier.Eventuell solltest du direkt eine Insert-Procedure erstellen und ihr dann wie in dem Beispiel die Parameter übergeben.
Wichtig ist dieser Part hier:
public static void InsertMessage(MessageItem MessageItem) { MySqlCommand cmd = new MySqlCommand("InsertMessage", new MySqlConnection(GetConnectionString()));//hier ruft er die Procedure auf, welche weiter oben in MySQL deklariert wurde. cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new MySqlParameter("param1", MessageItem.Name)); cmd.Parameters.Add(new MySqlParameter("param2", MessageItem.Email)); cmd.Parameters.Add(new MySqlParameter("param3", MessageItem.Message)); cmd.Connection.Open(); cmd.ExecuteNonQuery(); cmd.Connection.Close(); }
Hallo Firefighter,
danke für deine Antwort, leider klappt auch dieses Beispiel nicht.
Ich glaube aber inzwischen, das es ein Bug im Treiber ist, da wenn ich mir im Debugger die Anzahl der Parameter anschaue, dann sagt er mir, das es 6 Parameter (bzw. im obrigen Beispiel 3) sind.Werde mal einen anderen Treiber Testen.
Grüße
Waldemar
-
Also jetzt bin ich mit meinem Latein endgültig am Ende.
Wenn ich als Treiber die Version 5.1.7.0 von MySql verwende, bekomme ich folgende FM:
Parameter '?64' not found in the collection."
Wenn ich als Treiber die Version 5.2.5.0 verwende, bekomme ich oben genannte FM.
Hat irgendwer die selben Probleme?
Grüße
Waldemar