C # mysql Execute Reader со строкой ввода параметров был не в правильном формате

#c# #asp.net #mysql

#c# #asp.net #mysql

Вопрос:

Я пытаюсь создать страницу aspx для входа в систему.

Что я здесь делаю не так?

 MySqlConnection cn = new MySqlConnection("Server=localhost;Database=securitytest; User=root;Password=sx;");

    cn.Open();
    MySqlCommand cmd = new MySqlCommand("Select * from login where username=@username and password=@password", cn);

    //Add parameters to get the username and password  

    cmd.Parameters.Add("@username", OdbcType.VarChar);
    cmd.Parameters["@username"].Value = this.Login1.UserName;

    cmd.Parameters.Add("@password", OdbcType.VarChar);
    cmd.Parameters["@password"].Value = this.Login1.Password;

    MySqlDataReader dr = default(MySqlDataReader);
    // Initialise a reader to read the rows from the login table.  
    // If row exists, the login is successful  

    dr = cmd.ExecuteReader();

    if (dr.HasRows)
    {
        e.Authenticated = true;
        // Event Authenticate is true  
    }
  

Ответ №1:

Поставщик базы данных MySQL использует ? чтобы найти параметры в SQL. Итак, использовать ? вместо @ для обозначения ваших параметров в вашем SQL-запросе:

 MySqlCommand cmd = new MySqlCommand("Select * from login where username=?username and password=?password", cn);

cmd.Parameters.Add("?username", OdbcType.VarChar);
cmd.Parameters["?username"].Value = this.Login1.UserName;

...
  

Надеюсь, это поможет.

Комментарии:

1. @Mike: Я не имею в виду поставщика ODBC. Смотрите эту ссылку dev.mysql.com/doc/refman/5.0/es /… для поставщика MySQL .Net. Там вы найдете примечание, в котором говорится: Предыдущие версии провайдера использовали символ «@» для обозначения параметров. Используется новая версия? вместо этого.