Insérer dans une base de donnée à partir d'une textBox

Résolu
S1rK Messages postés 17 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 15 novembre 2011 - 24 févr. 2010 à 09:44
S1rK Messages postés 17 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 15 novembre 2011 - 24 févr. 2010 à 11:53
Bonjour à tous,

Débutant en C# et SQL, j'en appel a votre bon coeur. Voila mon problème:
Je souhaite, à partir d'une textBox, rentrer la valeur saisie dans ma bdd.

Après moultes recherches, j'ai trouvé mon bonheur, mais voila, lorsque j'exécute mon programme, celui-ci n'aime pas du tout cette partie "&textBox1.Text&", me prétextant ceci: "L'opérateur '&' ne peut pas être appliqué aux opérandes de type 'string' et 'string'"

try
{

SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = "***";
myConnection.Open();

SqlCommand myCommand = new SqlCommand();
myCommand.CommandText = ("INSERT INTO Produit (Nom) VALUES ('"&textBox1.Text&"') ");

myConnection.Close();

MessageBox.Show("Produit Ajouter", "OK");

}

catch (SqlException exp)
{
MessageBox.Show(exp.Message);
}

Si vous avez une petite idée, je suis plus que preneur =)
Merci d'avance!

5 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
24 févr. 2010 à 10:36
Salut

En C#, le symbole de concaténation de chaines de caractère est +
myCommand.CommandText = "INSERT INTO Produit (Nom) VALUES ('" + textBox1.Text + "')";


Il ne faut pas non plus oublier d'exécuter ta requête.
myCommand.ExecuteNonQuery();

ExecuteNonQuery() permet d'exécuter une requête qui ne renvoie pas de résultat (INSERT, UPDATE, DELETE...)

L'autre solution consiste à utiliser des requêtes dites paramétrées.

myCommand.CommandText = "INSERT INTO Produit (Nom) VALUES (@NomProduit)";
myCommand.Parameters.Add(new SqlParameter("@NomProduit", textBox1.Text));
myCommand.ExecuteNonQuery();

C'est plus lisible, surtout dans les grandes requêtes.
C'est plus facile de mettre telle ou telle valeur selon une certaine condition.
Ça évite d'avoir à savoir comment on doit écrire la requête pour ce type de données (pas besoin de mettre ' autour d'un string par exemple).
Ça évite l'injection SQL.

PS : Je suppose que tu voulais écrire "Produit Ajouté" dans ta MessageBox, pas "Produit Ajouter".

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
6
S1rK Messages postés 17 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 15 novembre 2011 4
24 févr. 2010 à 11:31
Salut, un grand merci a toi de te prendre la peine de m'expliquer aussi clairement, c'est vraiment très appréciable pour un néophyte comme moi =) Je commence justement a voir de plus près les requêtes paramétrés en ce moment, mais ne pensais pas en avoir l'utilité ici forcément.

Malgré tout, j'ai encore un petit souci, lors de l'exécution de mon programme, celui s'arrête justement sur la dite requête: "myCommand.ExecuteNonQuery();" avec comme justification "ExecuteNonQuery : la propriété Connection n'a pas été initialisée."

   
            SqlConnection myConnection = new SqlConnection();
            myConnection.ConnectionString = "server=***;user=***;password=***;initial catalog=***";
            myConnection.Open();
            try
            {
                SqlCommand myCommand = new SqlCommand();
                /* myCommand.CommandText = ("INSERT INTO Produit (Nom) VALUES ('"+textBox1.Text+"')"); */
                myCommand.CommandText = "INSERT INTO Produit (Nom) VALUES (@NomProduit)";
                myCommand.Parameters.Add(new SqlParameter("@NomProduit", textBox1.Text));

                myCommand.ExecuteNonQuery();

                MessageBox.Show("Produit Ajouté", "OK");

            }

            catch (SqlException exp)
            {
                MessageBox.Show(exp.Message);
            }

            finally
            {
                myConnection.Close();
            }


encore un grand merci à toi, et aux éventuelles autres personnes qui passeront ici =)
2
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
24 févr. 2010 à 11:39
C'est juste, je n'avais pas fait gaffe.

Tu as créé ta connexion, tu l'ouvres, tu la refermes à la fin, mais tu as oublié d'indiquer à ta commande quelle connexion utiliser.

myCommand.Connection = myConnection;


Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
2
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
24 févr. 2010 à 11:47
En fait, l'exception parle d'elle même.

ligne : myCommand.ExecuteNonQuery();
"La propriété" => Une propriété est le nom donné à un accesseur en C#. Il s'agit d'un membre d'un objet. Or le seul objet sur la ligne générant l'exception est myCommand.
"La propriété Connection" => Bah, maintenant que tu sais de quel objet on parle, c'est très clair : myCommand.Connection
"n'a pas été initialisé" => Tu ne lui a pas donné de valeur.

Donc il fallait faire myCommand.Connection = uneValeur; avant le ExecuteNonQuery();

Bon, et là, je pense que c'est assez compréhensible que la valeur à mettre c'est myConnection dans ton cas.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
2

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
S1rK Messages postés 17 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 15 novembre 2011 4
24 févr. 2010 à 11:53
Haaaaaaaaaa oui effectivement! j'ai totalement oublié de remettre cette commande dans tout mon bordel, tête en l'air que je suis!

J'ai encore un peu de mal avec les commandes SQL, sinon je pense que je me serai rapidement aperçu de mon oublie, mais je l'avoue, je n'ai pas cherché bien loin ^^

Ça fonctionne parfaitement, un énorme merci a toi encore une fois, tu m'a été d'une grande aide =)

Have a nice day!
1
Rejoignez-nous