MySQL AddwithValue Problem



  • Morgen,

    sacht mal Leute bin ich hier grad zu doof, oder is da wirklich was falsch?
    Laut MySQL Doku sollte der DefaultParameterMarker ein ? sein.

    public List<UserInformation> GetUserInformation(string username)
            {
                List<UserInformation> userinfo = new List<UserInformation>();
                using (MySqlConnection conn = new MySqlConnection(Properties.Settings.Default.ConnectionString))
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand("SELECT Rechnername,F_Benutzername,P_Mac FROM t_workstation  WHERE F_Benutzername = '?Name'",conn);
                    cmd.Parameters.AddWithValue("?Name", username);
    
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            userinfo.Add(new UserInformation(reader["F_Benutzername"].ToString(), reader["Rechnername"].ToString(), reader["P_Mac"].ToString()));
                        }
                    }
    
                }
                return userinfo;
            }
    

    Nur wenn ich das Debugge erhalte ich nichts zurück.Obwohl eigentlich min 5 einträge zurückgegeben werden müssten.



  • Hahah hat sich erledigt.
    Der MySQL Provider nimmt mir das '' setzen ab, daher waren meine eigenen Redundant.

    Korrekt also:

    public List<UserInformation> GetUserInformation(string username)
            {
                List<UserInformation> userinfo = new List<UserInformation>();
                using (MySqlConnection conn = new MySqlConnection(Properties.Settings.Default.ConnectionString))
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand("SELECT Rechnername,F_Benutzername,P_Mac FROM t_workstation  WHERE F_Benutzername = ?Name",conn);
                    cmd.Parameters.AddWithValue("?Name", username);
    
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            userinfo.Add(new UserInformation(reader["F_Benutzername"].ToString(), reader["Rechnername"].ToString(), reader["P_Mac"].ToString()));
                        }
                    }
    
                }
                return userinfo;
            }
    


  • Deswegen benutzt man ja extra die Parameter, damit die Anführungszeichen nicht im Command sind, d.h. zum einen ist es dann egal, um was für einen Datentypen es sich handelt und zum zweiten wird damit SQL-Injection vermieden.



  • Ahh ok alles klar, dank dir für die kleine erläuterung


Anmelden zum Antworten