2012-11-27 2 views
20

Je fais un windows C# Application Form dans Visual Studio 2010.MySqlCommand Command.Parameters.Add est obsolète

Cette application se connecte à une base de données MySQL, et je veux insérer des données en elle.

Maintenant, dois-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 très bien. Ça marche.

J'ai lu here que la façon dont j'ai maintenant, est un moyen sûr de faire des requêtes. Est-ce toujours vrai?

Et maintenant à la vraie question. Avec ce code ci-dessus, je reçois l'avertissement suivant en studio visuel:

'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 chaque parameters.add

Et il ne fonctionne pas encore, 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 façon d'injecter sql faire un question?

+3

'utilisation AddWithValue' comme suggéré dans l'avertissement – Habib

+0

@Habib, fait, les avertissements ont disparu, mais pas encore la bonne valeur dans la db ...] – Mathlight

Répondre

24

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

Terminé, les avertissements sont partis, mais toujours pas les bonnes données dans le db ... – Mathlight

+3

et ne pas envelopper la valeur avec guillemet simple. voir ma mise à jour –

+0

Cela a fait l'affaire. Merci – Mathlight

0

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

afin que votre parm devrait être @mc_userName

+0

JW l'a déjà corrigé, bien que votre réponse puisse être vraie ... – Mathlight

-1

Ce code est 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() 
+0

Je pense que vous trouverez que vous devriez utiliser des crochets autour du nom du paramètre ainsi 'cmd.Parameters ["@ number"]. Value = 321' –

0

Il suffit de modifier/enlever du code dans cette partie

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

à

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

et Ajouter (à AddWithValue (