ExecuteNonQuery : la propriété CommandText n'a pas été initialisée

Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
- - Dernière réponse : cs_Yopyop
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
- 19 oct. 2006 à 17:32
Bonjour !
J'ai une une erreur de ce type:
ExecuteNonQuery : la propriété CommandText n'a pas été initialisée

Ligne 146 :
Ligne 147 :            cmdInsert.ExecuteNonQuery()
Ligne 148 :
Ligne 149 :        Next


Lorsque j'exécute le code suivant:
    Sub BtnValide_Click(ByVal sender As System.Object, ByVal e As       System.EventArgs) Handles BtnValide.Click<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

       
Dim conn As SqlConnection = New SqlConnection

 

conn.ConnectionString = "Server=INSRVSN2\GESTION ;Initial Catalog=Dev_GI2;uid=dev_gi2;password=dev_gi2"

               

 Dim cmdInsert AsNew SqlCommand

       conn.Open()

       Dim sqlInsert AsString

       Dim iCount AsInteger

       Dim strItem AsString

 

 

        For iCount = 0 To (ListBox3.Items.Count - 1)

            If ListBox3.Items.Item(iCount).Selected Then

                sqlInsert = " INSERT INTO GI_LISTEAPPLI2 (GILI_ID,GILI_APPLICATION)"

                sqlInsert += " VALUES ('" + ListBox3.Items(iCount).Value + "')"

            EndIf

            cmdInsert.CommandText = sqlInsert

 

            cmdInsert.Connection = conn

 

            cmdInsert.ExecuteNonQuery()

 

        Next

       conn.Close()

 

    EndSub

Pourriez vous m'aider???
Merci d'avance
Afficher la suite 

19 réponses

Meilleure réponse
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
1
Merci
Ollaaaa loll
faut pas faire comme ca

1 dans un premier temps tu n'as qu'a recuperer chaque element de ta lisbox (euu une listbox ??? admettons)
et tu crees un parametre pour chaque element (mm ajouter un test pour voir si tu as au moins 1 element)
du style :

Dim p1
As SqlParameterp1 =

New SqlParameter(
"@p1", SqlDbType.Char, 200)p1.Value ="valeur"

2 ensuite tu ajoutes tes parametres a la command
cmdInsert.Parameters.Add(p1)

3 et tu tapes ta requete du style
INSERT INTO table1 (colonne1,colonne2) values (@p1,@p2)

par contre comme cest une requete insert tu dois savoir le nb elements deja que tu auras a ajouter et je te deconseille l'utilisation d'une listbox,prend plutot des textbox en plus tu pourraus beaucoup plus facielement recuperer les valeurs et les tester (avec en plus un errorprovider par ex)

+

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de romagny13
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
1
Merci
oOps non pas un errorprovider cest de l asp.net
mais avec les controls de validation > RequiredFieldValidator,RangeValidator,...

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de romagny13
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
2
0
Merci
Salut,

En complément de ce que dis romagny13, jette un coup d'oeil à ce tuto sur les SqlParameters : http://webman.developpez.com/articles/aspnet/sqlparameter/vbnet/

Bonne soirée

<hr width="100%" size="2" />Nurgle(Antoine)
Commenter la réponse de cs_Nurgle
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
re, essayes

Sub BtnValide_Click(ByVal sender As System.Object, ByVal e As       System.EventArgs) Handles BtnValide.Click    
Dim conn As SqlConnection = New SqlConnection
conn.ConnectionString = "Server=INSRVSN2\GESTION ;Initial Catalog=Dev_GI2;uid=dev_gi2;password=dev_gi2"
Dim cmdInsert AsNew SqlCommand


Dim sqlInsert AsString
Dim iCount AsInteger
Dim strItem AsString


conn.Open()
cmdInsert.Connection = conn


For iCount = 0 To (ListBox3.Items.Count - 1)


If ListBox3.Items.Item(iCount).Selected Then
sqlInsert = " INSERT INTO GI_LISTEAPPLI2 (GILI_ID,GILI_APPLICATION)"
sqlInsert += " VALUES ('" + ListBox3.Items(iCount).Value + "')"


cmdInsert.CommandText = sqlInsert
cmdInsert.ExecuteNonQuery()


EndIf




Next
conn.Close()

par contre il manque une valeur dans ton insert:
GILI_ID,GILI_APPLICATION
et tu insères uniquement une valeur : VALUES ('" + ListBox3.Items(iCount).Value + "')
si ton gili_id est l'identity, tu peux l'enlever.

et laisse tomber l'idée de romagny13 concernant la textbox... je ne pense pas que cela corresponde à ce que tu veux faire.
yopyop
Commenter la réponse de cs_Yopyop
Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
0
Merci
Bonjour YopYop!!
Merci pour ta réponse,ça fonctionne sans erreur quand j'enlève GILI_ID et quand je mets GILI_ID en identity, mais mon problème n'est pas résolu..
Si tu veux sur ma Table listeapplication, j'ai 2 propriétés, c'est à dire les clés étrangères de 2 autres tables (Incident et application)!
Et sur mon interface,j'ai 2 listebox, dans l'un j'ai toutes les applications de la table application et dans l'autre on devrait choisir à l'aide d'une flèche,les applications pour un seul incident (un incident peur avoir plusieurs application)...Je ne sais pas si je m'exprime bien, en tout cas c'est ça mon problème...
Je sais que dans mon code il manque un logique mais je n'arrive pas trouver l'erreur...

Merci!
Commenter la réponse de prasbanu
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
oki,

donc 3 tables, listeapplication, incident et application.
listeapplication (GILI_APPLICATION, qui contient uniquement des FK sur incident et application) est une associative entre incident et application.

ca, ca m'a l'air ok, mais je ne comprends pas trop les listbox...

Tu selectionnes une application (dans une des listbox), mais l'autre ?
Qu'est ce que tu essaies de faire exactement ?

Explique un peu mieux stp (genre : je selectionne une application (1 seule), ensuite, je selectionne les incidents possibles (+sieurs possibles), ensuite je clicke sur Save et j'enregistre les incidents associés à cette application)

yopyop
Commenter la réponse de cs_Yopyop
Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
0
Merci
bah au fait,
dans un listbox j'affiche toutes les applications possible et dans l'autre listbox je bascule avec une flèche les application que je ve pour un incident donné...et je clique sur save, il faut que j'ai dans la base,par ex
incident 1 > application 1, 2 ,3 et dans liste application j'ai 3 ligne
1 >1
1>2
1>3
Mon pb je ne sais pas comment je pourrais faire pour icident dans la requete...J'espère que tu as compris mon soucis..
Au fait c'est un incident qui peur avoir plusieurs applications..C'est pour ça j'ai mis les applications dans un listbox pour pouvoir les choisir....
Merci pour ton aide!
Commenter la réponse de prasbanu
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
re,

dans ton insert, il te faut les ids des applications selectionnées et l'id de l'incident sélectionné.

ta table listeapplication doit avoir 2 coloones qui sont 2 clés étrangères.
1 avec l'id de l'application  et 1 avec l'id de l'incident

ensuite dans ton insert (utilise le code que j'ai posté et modifie juste le SQL.. et utilise les bons noms des tables/colonnes, je les ai changé en qqch de plus explicite)

sqlInsert = " INSERT INTO APPL_INCIDENTS (INCIDENT_ID,APPLICATION_ID)"
sqlInsert += " VALUES ('" + incidentID + "','" + ListBox3.Items(iCount).Value + "')"

si ton incident estdans une listbox, ca devrait donner qqch comme:
sqlInsert = " INSERT INTO APPL_INCIDENTS (INCIDENT_ID,APPLICATION_ID)"
sqlInsert += " VALUES ('" + lstBoxIncident.SelectedValue + "','" + ListBox3.Items(iCount).Value + "')"

yopyop

ps:
si tes ids sont de type numérique (c'est mieux, les requêtes sont plus rapides), tu peux enlever les ' lors de l'insert:
sqlInsert = " INSERT INTO APPL_INCIDENTS (INCIDENT_ID,APPLICATION_ID) "
sqlInsert += " VALUES (" + lstBoxIncident.SelectedValue + "," + ListBox3.Items(iCount).Value + ")"
Commenter la réponse de cs_Yopyop
Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
0
Merci
Bonjour YOPYOP! Merci pour ta réponse précedente!!   J'avais modifié mon code,j'ai quand meme des petites erreurs!
Premièrement j'ai une erreur sur GILI_ID car il n'est pas déclaré,j'ai essayé avec cette erreur..ça fonctionne mais le GILI_ID ne change pas,j'ai toujours le même identifiant dans la colonne GILI_ID.



Sub
BtnValide_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
BtnValide.Click


Dim
conn

As
SqlConnection =

New
SqlConnectionconn.ConnectionString = "Server=INSRVSN2\GESTION ;Initial Catalog=Dev_GI2;uid=dev_gi2;password=dev_gi2"


Dim
cmdInsert

As



New
SqlCommand


Dim
sqlInsert

As



String






Dim
iCount

As



Integer






Dim
strItem

As



String

conn.Open()


cmdInsert.Connection = conn







For
iCount = 0

To
(ListBox3.Items.Count - 1)


If
ListBox3.Items.Item(iCount).Selected

Then

sqlInsert = " INSERT INTO GI_LISTEAPPLI3 (GILI_ID,GILI_APPLICATION)"


sqlInsert += " VALUES (" + GILI_ID + "," + ListBox3.Items(iCount).Value + ")"


 


cmdInsert.CommandText = sqlInsert


cmdInsert.ExecuteNonQuery()







End



If 








Next

conn.Close()







End



Sub

Voilà je n'arrive toujours pas régler mon pb!Dsl!!!
Merci d'avance!
Commenter la réponse de prasbanu
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
re,

quel est le but de la page ????
Est-ce que par hasard, le but serait de CREER un incident et en même temps lui affecter les applications concernées ??

PS:
renomme tes listboxs avec des noms corrects, ca aide.. par exemple ListBox3=lstBoxApplications

yopyop
Commenter la réponse de cs_Yopyop
Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
0
Merci
oui exacte,c'est bien de créer un incident et et en meme temps de lui affecter les application concernées!

Sub BtnValide_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles BtnValide.Click

Dim conn As SqlConnection New SqlConnectionconn.ConnectionString "Server=INSRVSN2\GESTION ;Initial Catalog=Dev_GI2;uid=dev_gi2;password=dev_gi2"

Dim cmdInsert
As
New SqlCommand

Dim sqlInsert
As
String

Dim iCount
As
Integer

Dim strItem
As
Stringconn.Open()

cmdInsert.Connection = conn

For iCount = 0
To (Listeappli.Items.Count - 1)

If Listeappli.Items.Item(iCount).Selected
ThensqlInsert = " INSERT INTO GI_LISTEAPPLI3 (GILI_ID,GILI_APPLICATION)"

sqlInsert += " VALUES (" + GILI_ID + "," + Listeappli.Items(iCount).Value + ")"

 

cmdInsert.CommandText = sqlInsert

cmdInsert.ExecuteNonQuery()

End
If 

Nextconn.Close()

End
Sub
Je ne sais pas si tu vois où se produit le pb!!!
J'espère qu'il y  a une solution!!
Je te remerci beaucoup!
Commenter la réponse de prasbanu
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
Re,


Voici un example de code avec :


1 Table application
id (identity), name


1 Table incident
id (identity), name


1 Table appl_incident
application_id (FK sur application.id),
incident_id (FK sur incident.id)




Je considère que ma table application contient déjà quelques enregistrements.


Dans mon interface j'ai:
Une listebox avec la liste complète des applications: lstBoxAvailApplications
Une textbox pour saisir le nom d'un incident: txtBoxIncName.
Un bouton pour faire l'enregistrement: BtnValide


 


Sub BtnValide_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnValide.Click


Dim Connection As SqlConnection
Dim Command As New SqlCommand
Dim Trans As SqlTransaction
Dim lNewIncidentId As Long
Dim iCount as Integer


Try
Dim conn As SqlConnection = New SqlConnection


Connection = New SqlConnection
Connection.ConnectionString = "Server=INSRVSN2\GESTION ;Initial Catalog=Dev_GI2;uid=dev_gi2;password=dev_gi2"
Connection.Open()
Trans = Connection.BeginTransaction()


Command.Connection = Connection
Command.CommandType = CommandType.Text
Command.Transaction = Trans


'On va commencer par insérer le nouvel incident
'comme le champs id est du type identity, je n'ai pas besoin de l'insérer, il est généré automatiquement par SQL Server
Command.CommandText = "INSERT INTO incident (name) VALUES (' & txtBoxIncName.text.replace("'","''") & "') "


'insertion de l'incident
Command.ExecuteNonQuery()


'il faut récupérer l'id du nouvel incident
Command.CommandText = "SELECT @@IDENTITY"
' tu peux également utilser SELECT @@SCOPE_IDENTITY, c'est mieux...

lNewIncidentId = Convert.ToInt64(Command.ExecuteScalar())


'Maintenant on insère dans l'associative appl_incident
For iCount = 0 To (lstBoxAvailApplications.Items.Count - 1)
Command.CommandText = "INSERT INTO appl_incident (incident_id,application_id) values (" & lNewIncidentId & "," & lstBoxAvailApplications.Items(iCount).Value & ") "
Command.ExecuteNonQuery()
Next


Trans.Commit()

Catch ex As Exception
Trans.Rollback()
Throw
Finally
Connection.Close()
End Try


EndSub

yopyop
Commenter la réponse de cs_Yopyop
Messages postés
710
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
27 août 2014
2
0
Merci
mdrrr dsl
Commenter la réponse de romagny13
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
des commentaires romagny13 ?

yopyop
Commenter la réponse de cs_Yopyop
Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
0
Merci
Bonjour YopYop!Merci pour ton code,c'est bien ça que je voulais...Mais je n'insérerais rien dans la table incident,car j'ai un autre formulaire dans lequel j'informe d'autres infos et j'insère dans la table Incident..
Après que j'ai vu ton code j'ai eu une nouvelle idée,c'est de récupérer dans un textbox le Id-incident de la table incident (c'est à dire si on a 4 incident le prochain ça sera 5,donc j'aimerais dans le textbox 5)...
Comme ça je pourrais sans pb,insérer dans la table listeapplication, id et application...

Je ne c pas exactement si c'est faisable! Ou encore si c'est logique...
Pourrais tu donné un avis!!!!
Merci d'avance
Commenter la réponse de prasbanu
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
re,

je ne comprends pas bien.... cette autre page avec les détails de l'incident s'affiche après ou avant ?
pourquoi ne pas tout faire un en coup ? une page avec tout les informations concernant l'incident (y compris la liste des applications concernées) ?

yopyop
Commenter la réponse de cs_Yopyop
Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
0
Merci
Bah au fait c'est ce que je voulais faire d'abord mais je ne savais pas trop comment il fallait gérer...
Si tu veux au niveau d'interface,j'ai une page nouveau.aspx,dans laquelle je renseigne la personne qui saisi l'incident,la date ouv,la date fermeture... et sur la même page j'ai un bouton application quand je clik  une autre page listeappli.aspx s'ouvre sous forme de Pop up,c'est sur cette page que j'ai les 2 listboxes...
J'ai 2 fois le bouton enregistrer,une fois sur la page nouveau.aspx et sur listeappli.aspx...Comme je ne trouvais pas de solution,je voulais faire un enregistrement en 2 temps,car je devrais remplir 2 tables en même temps ,la table Incident et la table Listeapplication....
Je sais que cette solution pourrait faire des doublons dans la base,mais je n'avais pas d'autre solution...

J'espère que tu comprends mieux ma situation,dsl j'ai du mal à m'exprimer!!
Je te remercie beaucoup pour toutes les réponses que tu m'as donné..Je pensais jamais trouvé une solution,mais tu me rassures!

Merci encore!!
Commenter la réponse de prasbanu
Messages postés
18
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
19 octobre 2006
0
Merci
Bonjour YopYop! Tu as l'air occupé!!
Tu n'as pas de solution pour mon pb???????

Merci d'avance!!
Commenter la réponse de prasbanu
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
0
Merci
re,

désolé, effectivement beaucoup de boulot

si tu veux, tu peux m'envoyer tes pages aspx+vb (zip) + sql de création de la base et je m'en occupe demain.

yopyop
Commenter la réponse de cs_Yopyop