Подтвердить что ты не робот

MySqlCommand Command.Parameters.Add устарел

Я делаю приложение формы Windows С# в visual studio 2010.

Это приложение подключается к базе данных mysql, и я хочу вставить в нее данные.

Теперь у меня есть эта часть кода:

MySqlConnection connection;
string cs = @"server=server ip;userid=username;password=userpass;database=databse";
connection = new MySqlConnection(cs);
connection.Open();

MySqlCommand command = new MySqlCommand();
string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES ('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')";
command.CommandText = SQL;
command.Parameters.Add("@mcUserName", mcUserNameNew);
command.Parameters.Add("@mcUserPass", mcUserPassNew);
command.Parameters.Add("@twUserName", twUserNameNew);
command.Parameters.Add("@twUserPass", twUserPassNew);
command.Connection = connection;
command.ExecuteNonQuery();
connection.Close();

Соединение прекрасное. Это работает.

Я прочитал здесь, что способ, которым я располагаю сейчас, является экономичным способом выполнения запросов. Это все еще правильно?

И теперь к реальному вопросу. С этим кодом выше, я получаю следующее предупреждение в визуальной студии:

'MySql.Data.MySqlClient.MySqlParameterCollection.Add(string, object)' is obsolete: '"Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value)"'

Это предупреждение для каждого параметра .add

И он даже не работает, потому что вставляемые значения - это @mcUserName, @mcUserPass и т.д. вместо значений, которые сохраняются переменными mcUserNameNew и т.д.

Итак, мой вопрос: я что-то делаю неправильно, и каков новый способ SQL-инъекции сохранить запрос?

4b9b3361

Ответ 1

попробуйте AddWithValue

command.Parameters.AddWithValue("@mcUserName", mcUserNameNew);
command.Parameters.AddWithValue("@mcUserPass", mcUserPassNew);
command.Parameters.AddWithValue("@twUserName", twUserNameNew);
command.Parameters.AddWithValue("@twUserPass", twUserPassNew);

и не помещайте заполнители одиночными кавычками.

string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES (@mcUserName, @mcUserPass, @twUserName, @twUserPass)";

Ответ 2

@mcUserName должно соответствовать запросу mc_userName в запросе.

поэтому ваш парм должен быть @mc_userName

Ответ 3

Просто отредактируйте/удалите код в этой части

('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')

to

(@mcUserName, @mcUserPass, @twUserName, @twUserPass)

и Добавить (в AddWithValue (

Ответ 4

Это код VB...

cmd.Parameters.AddWithValue("@number", 1) 'set @number as numeric
cmd.Parameters.AddWithValue("@text", "this will be a text variable") 

cmd.Parameters("@number").Value = 321  'now @number has a value
cmd.Parameters("@text").Value = "A string value" 'now @text has a value

cmd.ExecuteNonQuery()