MySqlCommand Command.Parameters.Add已过时
我在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();
连接很好。 这样可行。
我在这里强调,我现在拥有的方式是进行查询的保存方式。 这还不错吗?
而现在到了真正的问题。 使用上面的代码,我在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注入的新方法保存查询?
尝试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')
至
(@mcUserName, @mcUserPass, @twUserName, @twUserPass)
和Add(到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()
- 来自C#的Outlook 2007 – COMexception,TYPE_E_LIBNOTREGISTERED
- DataContext.Refresh()的正确用法是什么?
- 以管理员身份运行:requireAdministrator&ClickOnce +模拟系统时间
- ODP.NET Oracle.ManagedDataAcess随机ORA-12570错误
- 在字符串上构建表达式时如何实现LessThan等
- RateOfCountsPerSecond32类型的计数器始终显示0
- 你如何在wpf中创建数据表?
- 当我引用windows.phone时,“在模块mscorlib.dll中找不到类型system.systemexception”
- 在C#中读取xml文件的节点