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

prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006 - 12 oct. 2006 à 13:15
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
A voir également:

19 réponses

romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
12 oct. 2006 à 13:30
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)

+
1
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
12 oct. 2006 à 13:33
oOps non pas un errorprovider cest de l asp.net
mais avec les controls de validation > RequiredFieldValidator,RangeValidator,...
1
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
12 oct. 2006 à 22:57
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)
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
13 oct. 2006 à 10:23
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
0

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

Posez votre question
prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006
13 oct. 2006 à 11:21
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!
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
13 oct. 2006 à 12:48
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
0
prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006
13 oct. 2006 à 13:40
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!
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
13 oct. 2006 à 14:18
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 + ")"
0
prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006
16 oct. 2006 à 10:42
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!
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
16 oct. 2006 à 11:15
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
0
prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006
16 oct. 2006 à 11:23
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!
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
16 oct. 2006 à 12:48
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
0
romagny13 Messages postés 687 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 27 août 2014 3
16 oct. 2006 à 13:10
mdrrr dsl
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
16 oct. 2006 à 13:59
des commentaires romagny13 ?

yopyop
0
prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006
17 oct. 2006 à 12:57
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
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
17 oct. 2006 à 13:16
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
0
prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006
17 oct. 2006 à 14:45
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!!
0
prasbanu Messages postés 18 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 19 octobre 2006
19 oct. 2006 à 14:16
Bonjour YopYop! Tu as l'air occupé!!
Tu n'as pas de solution pour mon pb???????

Merci d'avance!!
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
19 oct. 2006 à 17:32
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
0
Rejoignez-nous