Команда MySqlCommand.Параметры.Добавить устарело
Я делаю приложение Windows Form C# в 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();
соединение в порядке. Эта работа.
Я прочитанные здесь, кстати, что у меня есть сейчас, - это сохранить способ сделать запрос. Это все еще верно?
а теперь к настоящему вопросу. С этим кодом выше, я получаю следующее предупреждение в visual studio:
'MySql.Data.MySqlClient.MySqlParameterCollection.Add(string, object)' is obsolete: '"Add(String parameterName, Object value) has been deprecated. Use AddWithValue(String parameterName, Object value)"'
это предупреждение для всех параметров.добавить
и он даже не работает, потому что вставленные значения - @mcUserName, @mcUserPass и так далее, а не значения, которые удерживают переменные mcUserNameNew и так далее...
Итак, мой вопрос в том, делаю ли я что-то неправильно, и каков новый способ SQL-инъекции сохранить запрос?
5 ответов
попробовать 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)";
просто отредактируйте / удалите код в этой части
('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')
to
(@mcUserName, @mcUserPass, @twUserName, @twUserPass)
и Add( to AddWithValue (
пожалуйста, прочитайте эту статью, советую вам использовать AddWithValue
:
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
Он говорит в основном, что AddWithValue
иногда может неправильно определять правильный тип. Использовать Add
вместо.
@mcUserName должен соответствовать mc_userName в запросе ..
таким образом, ваш parm должен быть @mc_userName
это код 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()