ExecuteNonQuery : la propriété CommandText n'a pas été initialisée
prasbanu
Messages postés18Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention19 octobre 2006
-
12 oct. 2006 à 13:15
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 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" /??>
romagny13
Messages postés687Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention27 août 20143 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)
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 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 + "')"
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
prasbanu
Messages postés18Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention19 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...
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 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)
prasbanu
Messages postés18Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention19 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!
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 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)
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 + ")"
prasbanu
Messages postés18Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention19 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)"
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 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...
prasbanu
Messages postés18Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention19 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
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 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) ?
prasbanu
Messages postés18Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention19 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!