[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 diese

    Procedure 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


Anmelden zum Antworten