c# - MySqlCommand Command.Parameters.Add 已过时

标签 c# mysql parameters deprecated sqlcommand

我正在 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();

连接正常。行得通。

我读了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)"'

该警告是针对每个参数的。添加

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

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

最佳答案

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

关于c# - MySqlCommand Command.Parameters.Add 已过时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580993/

相关文章:

c# - 类属性的 Lambda 表达式

c# - 通过 C# 处理代理服务器中的 HTTPS 请求(CONNECT Tunnel)

mysql - bin 日志转储 - mysql 主从

c# - where 语句在 C# 中无法正常工作

python - (Python)正确的命名法是什么,以便我可以搜索和了解它?

android - AsyncTask 的 doInBackground(Params ... params) 发送不同类型的参数

c# - 循环遍历数据表,获取值和标题

c# - 替换(在模式末尾解析 "\"非法)

java - JDBC 连接失败 : java. sql.SQLException: Communication link failure: Bad handshake

c# - C#中如何将对象作为参数传递