loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 2016
-
29 févr. 2008 à 15:05
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
15 mars 2008 à 18:14
Bonjour à tous,
Voila j'aimerais que les données se trouvant dans mon DataGrid soit enregistré dans ma base SqlServer 2000.
J'ai commencé a réaliser cela :
CODE :
SqlDataAdapter MonAdapter=
new SqlDataAdapter();dataGrid2.Update();
DataTable dt=(DataTable) dataGrid2.DataSource;
MonAdapter.Update(dt);
Mais il m'affiche une erreure lorsque j'arrive à la 3éme ligne : " DataTable dt=(DataTable) dataGrid2.DataSource; "
L'erreur est la suivante : "
Informations supplémentaires*: Le cast spécifié n'est pas valide.
"
Je vois pas comment faire pour résoudre ce problème, avez-vous une idée??
Feriez-vous de cette manière là ou d'une autre?? Si c'est d'une autre expliqué moi comment.
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 14 mars 2008 à 18:37
Si tu faisait la synthese organisée minimum et conforme a ton environnement de ce que tu fais en éliminant tout le superflu
Ca t'aiderais déja toi meme a suivre le fil minimum de comment c'est sensé marcher
1- Les declarations
2- La connection
3- Le fill
4- L'update
Entre autre ce qui me pertube dans ton code c'est qu'il semble que je vois deux instanciation de ds1
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 29 févr. 2008 à 19:03
Ok
Donc to datagridview et remplit par une requete sql et ton datasource est le dataset resultat de cette requete pour les mise ajour voici la methode magiqsue que j'ai mis un peu de tempq a trouver :
// Le plus important c'est de preparer les commandes sql , cette methode t'epargne de devoir le faire a la main ( tu dois donner ton adapter)
MySqlCommandBuilder cb = new MySqlCommandBuilder(dataAdapter);
// Ensuite tu charge les modifs dans un ds temporaire et tu applique les differents cangemeents
DataSet ch = new DataSet();
ch = dsAddr.GetChanges(DataRowState.Deleted);
if (null != ch)
{
int del=adaAddr.Update(ch);
lbl_delcnt.Text = del.ToString();
}
ch = dsAddr.GetChanges(DataRowState.Modified);
if (ch != null)
{
int upd=adaAddr.Update(ch);
lbl_updcnt.Text = upd.ToString();
}
ch = dsAddr.GetChanges(DataRowState.Added);
if (ch != null)
{
int add=adaAddr.Update(ch);
lbl_addcnt.Text = add.ToString();
}
// Dans mon cas j'ai ajouté cette comande car des deletes dans la table principale cree des orphelins dans une table liée
MySqlCommand cmd = new MySqlCommand("DELETE from tours where addrID not in ( select addrID from address );", conn);
int tourdel=cmd.ExecuteNonQuery();
lbl_deltourcnt.Text = tourdel.ToString();
dsAddr.AcceptChanges();
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 3 mars 2008 à 15:28
Bonjour olibara,
Ok merci pour tes renseignement.
j'ai réalisé le code suivant :
try
{
SqlCommandBuilder cb new SqlCommandBuilder(dataAdapter); DataSet ch
new DataSet(); ch = ds.GetChanges(DataRowState.Deleted);
if (
null != ch) {
int del=dataAdapter.Update(ch); }
ch = ds.GetChanges(DataRowState.Modified);
if (ch !=
null) {
int upd=dataAdapter.Update(ch); }
ch = ds.GetChanges(DataRowState.Added);
if (ch !=
null) {
int add=dataAdapter.Update(ch); }
}
catch(Exception ex) {
MessageBox.Show(ex.ToString());
}
finally {
connection.Close();
}
Mais ça n'enregistre rien dans la base.Lorsque je debugge et que je glisse ma souris sur les lignes ch ..... telle que "ch ds.GetChanges(DataRowState.Added);" Il me mette : ch = <valeur non définie>
Il rentre pas non plus dans les "if..."
Comment cela se peut-il??
merci d'avance!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 29 févr. 2008 à 18:21
ben voici le code pour remplir ma DataGrid :
string
RelationClientele ("SELECT RC_DHRELCL as DateHeure, RC_CNURELCL as Contenu, RC_TELCTACT as Tel, RC_MOYCTACT as MoyenContact FROM RELATION_CLIENTELE WHERE RC_NUMINTER '" + NumInter.Text + "'");connection =
new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI");connection.Open();
try{
SqlDataAdapter dataAdapter new SqlDataAdapter(RelationClientele, connection);DataSet ds
new DataSet();dataAdapter.Fill(ds,"RelationClientele");
dataGrid2.DataSource = ds;
dataGrid2.DataMember = "RelationClientele";
}
catch(Exception ex){
MessageBox.Show(ex.ToString());
}
finally{
connection.Close();
}
Je pense que ce code répond a tes questions olibara?? !!
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 29 févr. 2008 à 18:25
Ok lassaad83. Ok merci encor pour ce lien mais je comprend pas trop le java puis poour ce que j'en ai regadé, il me guide pas trop mais je vais continuer à l'étudier.
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 1 mars 2008 à 09:26
Salut olibara,
Merci pour ton code, suis entrain d'essayer mais je me pose plusieurs questions :
* que signifie "dsAddr" de la ligne : " ch = dsAddr.GetChanges(DataRowState.Deleted);"??
* Que signifie "adaAddr" de la ligne : "int del=adaAddr.Update(ch);" ??
* A quoi correspond "lbl_delcnt.Text" ainsi que "lbl_updcnt" et "lbl_addcnt" ??
*
Puis je me demande dois-je remettre mon bout de code ou juste la création du DataAdapter??
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 1 mars 2008 à 10:03
* que signifie "dsAddr" de la ligne : " ch = dsAddr.GetChanges(DataRowState.Deleted);"??
dsAddr est le dataset qui sert de datasource a ton DGV (chez moi il s'appelle dsAddr)
* Que signifie "adaAddr" de la ligne : "int del=adaAddr.Update(ch);" ??
adaAddr est l'adapter qui a inititié le query select : tu dois utiliser celui la pour pouvoir generer les commande avec
MySqlCommandBuilder cb = new MySqlCommandBuilder(dataAdapter);
* A quoi correspond "lbl_delcnt.Text" ainsi que "lbl_updcnt" et "lbl_addcnt" ??
Ca c'est juste pour afficher dans ma form les resultats (counts) des modification faites
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 1 mars 2008 à 10:18
"dsAddr est le dataset qui sert de datasource a ton DGV" quand tu parle de cela, tu veux dire que ça correspond à celui qui ma permit de remplir mon DataGrid??
"adaAddr est l'adapter qui a inititié le query select : tu dois utiliser celui la pour pouvoir generer les commande" tu veux dire que c'est celui là qui ma permit d'exécuter ma requête qui ma permit de remplir mon dataGrid??
Mais j'ai fais cela :
CODE :
try
{
SqlDataAdapter MonAdapter=
new SqlDataAdapter();dataGrid2.Update();
DataTable dt=(DataTable) dataGrid2.DataSource;
MonAdapter.Update(dt);
SqlCommandBuilder cb new SqlCommandBuilder(dataAdapter);DataSet ch
new DataSet();ch = ds.GetChanges(DataRowState.Modified);
if (ch !=
null){
int upd = dataAdapter.Update(ch);}
ch = ds.GetChanges(DataRowState.Added);
if (ch !=
null){
int add = dataAdapter.Update(ch);}
}
catch(Exception ex){
MessageBox.Show(ex.ToString());
}
finally{
connection.Close();
}
Et ça foncitonne pas, c'est à dire qu'il me dit la chose suivante :
C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\SuiviIntervention.cs(911): Le type ou le nom d'espace de noms 'dataAdapter' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\SuiviIntervention.cs(917): Le type ou le nom d'espace de noms 'dataAdapter' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\SuiviIntervention.cs(914): Le type ou le nom d'espace de noms 'ds' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
C:\Documents and Settings\Propriétaire\Mes documents\Visual Studio Projects\SuiviClient_Distrib'Info\SuiviIntervention.cs(908): Le type ou le nom d'espace de noms 'ds' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
RAPPEL du code de emplissage de ma DataGrid : string
RelationClientele ("SELECT RC_DHRELCL as DateHeure, RC_CNURELCL as Contenu, RC_TELCTACT as Tel, RC_MOYCTACT as MoyenContact FROM RELATION_CLIENTELE WHERE RC_NUMINTER '" + NumInter.Text + "'");
connection =
new SqlConnection("Data Source=DIST-5B8D87E3A9;Initial Catalog=DistribInfo;Integrated Security=SSPI");
connection.Open();
try{
SqlDataAdapter dataAdapter =
new SqlDataAdapter(RelationClientele, connection);
DataSet ds =
new DataSet();
dataAdapter.Fill(ds,"RelationClientele");
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 1 mars 2008 à 10:31
Excuse moi
Mais si tu faisait un effort pour rendre ton code plus liisible sur le forum ca aidrait deja beaucoup la compréhension
Le simple cup / paste que tu semble faire crer un spagetti tres difficile a suive
J'ai cependant le sentiment que tu te melange bien les pinceaux dans l'update relis bien la logique de ce que j'ai fais ! je n'ai pas l'impression que tu fais la meme chose...
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 1 mars 2008 à 10:38
Désolé de pas mettre en plus clair le code mais je sait pas comment je peux faire pour le remodifier??
Je vois pas pourquoi tu dis ça :
"J'ai cependant le sentiment que tu te melange bien les pinceaux dans l'update relis bien la logique de ce que j'ai fais ! je n'ai pas l'impression que tu fais la meme chose..."??
Car j'ai fais la même chose que toi bon j'ai juste retiré la partie du delete car je ne veux pas supprimer le "ds".
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 1 mars 2008 à 11:28
Voila je pense que le bout de code ci apres est plus lisible
- c'est qui dataAdapter ou l'a tu défini
- meme chose pour ds
- Qu'est ce que tu essaye de faire avec le code en rouge ??
TU DOIS utiliser le dataset source de to datagridview
TU DOIS utiliser l'adapter qui a executé le query du fill de ton dataset
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 1 mars 2008 à 11:35
Pour le code en rouge, je sais pas trop, c'est l'ancien j'ai du oublier de le mettre en tant que com.
Le dataAdapter correspond au dataAdapter du code concernant l'insertion des données de la base dans mon DataGrid.
le ds correspond au dataSet qui ma permit de remplir mon dataGrid.
Comment faut faire pour utiliser le dataset source de to datagridview et l'adapter qui a executé le query du fill de ton dataset??
Faut savoir que je veux que le contenu de ma DataGrid s'enregistre dans ma base lorsque j'appuye sur un bouton.
loic20h28
Messages postés207Date d'inscriptionmardi 19 juin 2007StatutMembreDernière intervention22 février 20162 1 mars 2008 à 11:53
Tu va me prendre pour une merde mais je vois pas ce que tu veux dire par : "Tu les definis commun dans la classe de ta form ils seront accessible partout ! "??
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 3 mars 2008 à 16:11
Excuse moi de te le rappeller mais je trouve que ton code est toujours illisible
Peux tu faire un effort s'il te plait pour ne pas etaler quelque lignes de codes sur trois pages
La commande
DataSet ch=new DataSet();
Devrait te rendre un dataset a voir dans le watch windows