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?
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)";
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.
Modifiez/supprimez simplement du code dans cette partie
('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')
à
(@mcUserName, @mcUserPass, @twUserName, @twUserPass)
et Add (à AddWithValue (
@mcUserName doit correspondre au mc_userName dans la requête.
donc votre paramètre doit être @mc_userName