Consulta parametrizada para MySQL con C#

Resuelto Elie asked hace 15 años • 6 respuestas

Tengo el código a continuación (he incluido lo que creo que son todas las secciones relevantes):

private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_@ = ?;";
public bool read(string id)
{
    level = -1;
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.Add(new MySqlParameter("", val1));
    m.Parameters.Add(new MySqlParameter("", val2));
    MySqlDataReader r = m.ExecuteReader();
    if (r.HasRows)
        level = Convert.ToInt32(r.GetValue(0).ToString());
    r.Close();
    return true;
}

Cuando ejecuto esto, obtengo una IndexOutOfBoundsException al agregar el primer parámetro. ¿Qué he hecho mal?

Elie avatar Mar 17 '09 10:03 Elie
Aceptado

Pruebe esto en su lugar:

private String readCommand = 
             "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";

public bool read(string id)
{
    level = -1;
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.AddWithValue("@param_val_1", val1);
    m.Parameters.AddWithValue("@param_val_2", val2);
    level = Convert.ToInt32(m.ExecuteScalar());
    return true;
}
Chris avatar Mar 17 '2009 04:03 Chris
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    MySqlConnection con = new MySqlConnection("server=localhost;User Id=root;database=result;password=1234");
    con.Open();

    MySqlCommand cmd = new MySqlCommand("Select * from users where username=?username and password=?password", con);
    cmd.Parameters.Add(new MySqlParameter("username", this.Login1.UserName));
    cmd.Parameters.Add(new MySqlParameter("password", this.Login1.Password)); 

    MySqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows ==true)
    {
        e.Authenticated = true;
    }
}
Ujjwal Wagle avatar Feb 02 '2012 11:02 Ujjwal Wagle

Debe utilizar parámetros con nombre en su consulta. P.ej:

String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ?param1 AND VAL_2 = ?param2";

Luego, pase los nombres de los parámetros cuando cree una instancia de sus objetos MySqlParameter de esta manera:

m.Parameters.Add(new MySqlParameter("param1", val1));
Chry Cheng avatar Mar 17 '2009 04:03 Chry Cheng
m.Parameters.AddWithValue("parameter",value) 

Será una mejor opción para consultas parametrizadas.

Ranjit Singh avatar Nov 13 '2012 08:11 Ranjit Singh