cs_diga
Messages postés2Date d'inscriptionsamedi 2 décembre 2006StatutMembreDernière intervention 7 décembre 2006
-
6 déc. 2006 à 20:48
cs_diga
Messages postés2Date d'inscriptionsamedi 2 décembre 2006StatutMembreDernière intervention 7 décembre 2006
-
7 déc. 2006 à 00:40
Bonjour,
Je suis entrain de créer un programme ou j'utilise un datagridView lié par un BindingSource à un dataset dont les données proviennent d'une BD SQL SERVER.
L'utilisateur peux effectuer des modifications (ajout, suppression, retrait) sur les données de la table vie le datagrid view remplit par une commande SQL dont voici le code épuré.
1 DbDataAdapter ODA;
2 ODA = dbpf.CreateDataAdapter();
3 ODA.SelectCommand = oConn.CreateCommand();
4 ODA.SelectCommand.CommandText = "select * FROM acteurs WHERE nom= '" + listBoxActeurs.SelectedItem + "'";
5 ODA.Fill(dataSetInfo, "acteur");
Pour modifier les requètes SQL d'ajout, suppression ou modification en fonction des lignes mises à jour, j'ai utilisé un transtypage sur le DbDataAdapter vers un SqlDataAdapter de manière à pouvoir utiliser les évênements RowUpdating et RowUpdated. Puis je crée mes commandes Update, Insert et Delete comme ça.
//transtypage temporaire
6 sqlDA = (SqlDataAdapter)ODA;
7 sqlDA.RowUpdating += new SqlRowUpdatingEventHandler(sqlDA_RowUpdating);
8 sqlDA.RowUpdated += new SqlRowUpdatedEventHandler(sqlDA_RowUpdated);
16 //si c'est un update*
17 if (e.StatementType == StatementType.Update)
18 {
19 //ici je modifie la requète pour l'update
20 }
21 //si c'est un insert
22 if (e.StatementType == StatementType.Insert)
23 {
24
//ici je modifie la requète pour l'insert
25 }
26 //si c'est un delete*
27 if (e.StatementType == StatementType.Delete)
28 {
29
//ici je modifie la requète pour l'insert
30 }
31 }
Mon problème est que tout ce passe bien tant que l'utilisateur ne fait pas 2 modifications de type identique avant de lancer la mise à jour vers la base de données (via un bouton). C'est à dire que s'il y a 2 modification et/ou 2 insertions et/ou 2 delete, une exception se produit sur la ligne ODA.Update(dataSetInfo, "films"); avec le message suivant:
exception: l'index (de base 0) doit être supérieur ou égal à 0 et inférieur à la taille de la liste de ses arguments
Après de longues recherches sur le net et sur ce site, je ne comprends toujours pas d'où provient ce genre d'erreur.
J'ai aussi un autre problème qui n'a rien (je pense) en commun avec le premier, c'est que dans mes requète, certaine donnée que j'ajoute ou modifie possède des quotes ( ' ) et ca fout en l'aire la requète SQL qui croit que c'est le délimiteur de fin de champs tetxe.
Voilà, je pense avoir été le plus précis possible mais si vous avez besoin d'autres détail n'hésitez pas.
Un grand merci d'avance à tous ceux qui tenteront ou qui pourront m'aider
IslandMan974
Messages postés104Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention27 juin 20073 7 déc. 2006 à 00:27
salut,
je ne sais pas exactement comment est codée l application mais en genaral ce genre d'erreur et generée lorsque qu'on q une condition sur des composants a dimensions.(tableaux....des choses dans ce genres la)
En fait "index de base 0 " signifie que ton tableau, par exemple,sur lequel tu doit surement opérer une condition doit commencer à 0 .
Pour moi ca vient soi d4un tableaux ,soit de ton dataset ....
cs_diga
Messages postés2Date d'inscriptionsamedi 2 décembre 2006StatutMembreDernière intervention 7 décembre 2006 7 déc. 2006 à 00:40
Bonjour,
Oui j'ai vérifié celà mais le seul tableau que j'utilise dans toute l'application est le tableau des tables qui sont contenues dans le dataset.
C'est d'ailleurs sur la ligne ODA.Fill(monDataset, MaTable) que l'application s'arrête mais j'ai déjà utilisé plein de fois cette table dans l'apllication sans problème et avec la même syntaxe.
De plus ça fonctionne tant que 2 modifications du même types (ajout, suppresion, modif) ne soient executée dans la même MAJ vers la base.
ex:
j'ajoute une ligne, j'en efface une autre et j'en modifie une troisième -->> ca fonctionne
J'efface 2 lignes ou je modifie 2 lignes -->> EXCEPTION