MySqlCommand Command.Parameters.Add es obsoleto

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í aquí 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?

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

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.

@mcUserName tiene que coincidir con mc_userName en la consulta.

entonces tu parm debería ser @mc_userName

Solo edita / elimina un código en esta parte

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

a

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

y Agregar (a AddWithValue (

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