MySqlCommand Command.Parameters.Add已过时

时间:2012-11-27 09:24:40

标签: c# mysql parameters deprecated sqlcommand

我正在Visual Studio 2010中制作一个C#windows Form Application。

该应用程序正在连接到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();

连接很好。这很有效。

我认为我现在的方式here是一种执行查询的保存方式。这还不对吗?

现在回到真正的问题。使用上面的代码,我在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)"'

该警告适用于所有parameters.add

它甚至不起作用,因为插入的值是@mcUserName,@ mcUserPass等等,而不是变量mcUserNameNew等等所持有的值......

所以我的问题是,我做错了什么,以及sql注入的新方法保存查询?

5 个答案:

答案 0 :(得分:28)

尝试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)";

答案 1 :(得分:1)

只需编辑/删除此部分中的一些代码

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

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

和添加(到AddWithValue(

答案 2 :(得分:1)

请阅读这篇文章,建议您不要使用AddWithValue

https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

基本上说AddWithValue有时会错误地推断出正确的类型。请改用Add

答案 3 :(得分:0)

@mcUserName必须匹配查询中的mc_userName ..

所以你的parm应该是@mc_userName

答案 4 :(得分:-1)

这是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()