Commande MySqlCommand.Paramètre.Ajouter est obsolète
je fais une demande de formulaire c# windows dans visual studio 2010.
Cette application se connecte à une base de données mysql, et je veux insérer des données.
maintenant j'ai 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 très bien. Qui fonctionne.
je lus ici que la manière que j'ai maintenant, c'est une façon d'arrêt à faire de la requête. Est-ce encore le droit?
et maintenant à la vraie question. Avec ce code ci-dessus, je reçois 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 est pour tous les paramètres.ajouter
et cela ne fonctionne même pas, parce que les valeurs qui sont insérées sont @mcUserName, @mcUserPass et ainsi de suite, au lieu des valeurs que les variables mcUserNameNew et ainsi de suite tiennent...
alors ma question Est, est-ce que je fais quelque chose de mal, et quelle est la nouvelle moyen de l'injection sql enregistrer faire une requête?
5 réponses
essayer 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)";
il suffit de modifier/supprimer un code dans cette partie
('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')
à
(@mcUserName, @mcUserPass, @twUserName, @twUserPass)
et Ajouter (pour ajouter
veuillez lire cet article, vous déconseiller l'utilisation de AddWithValue
:
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already /
il est dit fondamentalement que AddWithValue
pourrait parfois déduire incorrectement le type correct. Utilisez Add
à la place.
@mcUserName doit correspondre à mc_userName dans la requête ..
donc votre parm devrait être @mc_userName
c'est le code 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()