该MySqlCommand Command.Parameters.Add已经过时了(MySqlCom

2019-06-21 07:47发布

我做在Visual Studio 2010中的C#Windows窗体应用程序。

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

连接是好的。 这样可行。

我readed 在这里说,我现在的样子,是一种节约的方式做查询的。 是否仍然正确?

现在到了真正的问题。 通过上面的代码,我得到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注入保存做一个查询的新途径?

Answer 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)";


Answer 2:

只需编辑/在这部分删除一些代码

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

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

并添加(到AddWithValue(



Answer 3:

请阅读这篇文章,反对使用,建议您AddWithValue

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

它说基本上是AddWithValue有时会错误地推断出正确的类型。 使用Add代替。



Answer 4:

@mcUserName具有查询匹配mc_userName ..

所以你的PARM应该@mc_userName



Answer 5:

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


文章来源: MySqlCommand Command.Parameters.Add is obsolete