web-dev-qa-db-fra.com

MySqlCommand Command.Parameters.Add est obsolète

Je fais une application de formulaire Windows C # dans Visual Studio 2010.

Cette application se connecte à une base de données mysql, et je veux y insérer des données.

Maintenant, ai-je cette partie du code:

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 connexion est bonne. Ça marche.

J'ai lu ici que la façon dont je l'ai maintenant, est un moyen de sauvegarder les requêtes. Est-ce toujours vrai?

Et maintenant à la vraie question. Avec ce code ci-dessus, j'obtiens l'avertissement suivant dans 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)"'

Cet avertissement concerne tous les paramètres.

Et cela ne fonctionne même pas, car les valeurs insérées sont @mcUserName, @mcUserPass et ainsi de suite, au lieu des valeurs que les variables mcUserNameNew et ainsi de suite contiennent ...

Donc, ma question est, est-ce que je fais quelque chose de mal, et quelle est la nouvelle façon d'injecter sql enregistrer une requête?

20
Mathlight

essayez AddWithValue

command.Parameters.AddWithValue("@mcUserName", mcUserNameNew);
command.Parameters.AddWithValue("@mcUserPass", mcUserPassNew);
command.Parameters.AddWithValue("@twUserName", twUserNameNew);
command.Parameters.AddWithValue("@twUserPass", twUserPassNew);

et ne pas envelopper les espaces réservés avec des guillemets simples.

string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES (@mcUserName, @mcUserPass, @twUserName, @twUserPass)";
28
John Woo

Veuillez lire cet article, vous déconseillant d'utiliser AddWithValue:

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

Il indique essentiellement que AddWithValue peut parfois déduire de manière incorrecte le type correct. Utilisez Add à la place.

1
Adam Calvet Bohl

Modifiez/supprimez simplement du code dans cette partie

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

à

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

et Add (à AddWithValue (

1
Ramgy Borja

@mcUserName doit correspondre au mc_userName dans la requête.

donc votre paramètre doit être @mc_userName

0
Chris