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?

20
demandé sur Community 2012-11-27 13:24:39

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)";
28
répondu John Woo 2016-06-07 09:33:28

il suffit de modifier/supprimer un code dans cette partie

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

à

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

et Ajouter (pour ajouter

1
répondu Ramgy Borja 2017-08-01 05:48:39

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.

1
répondu Adam Calvet Bohl 2018-08-07 06:31:54

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

donc votre parm devrait être @mc_userName

0
répondu Chris 2013-05-17 21:44:32

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()
-1
répondu David 2014-11-27 08:00:01