c# - mysqldataadapter - MySqlCommand Command.Parameters.Add es obsoleto
mysqlcommand visual basic (5)
Estoy haciendo una aplicación de formulario de Windows C en Visual Studio 2010.
Esa aplicación se está conectando a una base de datos mysql, y quiero insertar datos en ella.
Ahora tengo esta parte del código:
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();
La conexión está bien. Eso funciona.
Leí here que la forma en que tengo ahora es una forma segura de hacer consultas. ¿Sigue siendo así?
Y ahora a la verdadera pregunta. Con ese código anterior, recibo la siguiente advertencia en 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)"''
Esa advertencia es para cada parámetro. Agregar
Y ni siquiera funciona, porque los valores que se insertan son @mcUserName, @mcUserPass y así sucesivamente, en lugar de los valores que las variables mcUserNameNew y así sucesivamente se mantienen ...
Entonces mi pregunta es, ¿estoy haciendo algo mal, y cuál es la nueva forma de ahorrar inyección de sql hacer una consulta?
@mcUserName tiene que coincidir con mc_userName en la consulta.
entonces tu parm debería ser @mc_userName
Este es el código 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()
Lea este artículo para no utilizar AddWithValue
:
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
Dice básicamente que AddWithValue
veces podría inferir incorrectamente el tipo correcto. Use Add
lugar.
Solo edita / elimina un código en esta parte
(''@mcUserName'', ''@mcUserPass'', ''@twUserName'', ''@twUserPass'')
a
(@mcUserName, @mcUserPass, @twUserName, @twUserPass)
y Agregar (a AddWithValue (
AddWithValue
command.Parameters.AddWithValue("@mcUserName", mcUserNameNew);
command.Parameters.AddWithValue("@mcUserPass", mcUserPassNew);
command.Parameters.AddWithValue("@twUserName", twUserNameNew);
command.Parameters.AddWithValue("@twUserPass", twUserPassNew);
y no ajuste los marcadores de posición con comillas simples.
string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES (@mcUserName, @mcUserPass, @twUserName, @twUserPass)";