Comment enregistrer des données d'un dataGrid dans ma base SqlServer

Résolu
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 - 29 févr. 2008 à 15:05
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 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.

merci d'avance pour votre aide!!

44 réponses

loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
3 mars 2008 à 16:23
Excuse moi mais comment veux-tu que je fasse pour ne pas étaler plus le code?? je l'ai déja arrangé je trouve. Je peux pas trop réduire!!

Qu'appelle tu "Watch Windows"?? Car si je regarde bien le site suivant : http://msdn2.microsoft.com/fr-fr/library/ms165042.aspx
il n'est pas applicable pour C# Standard. Enfin tout dépend ce qu'ils appels "standard" et "Pro et Team"?? !!

merci d'avance!!
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
3 mars 2008 à 16:36
Ecoute
Ou plutot ouvre tes yeux
Relis le dernier message ou tu a mis du code et relis ma reponse tu verra que chez toi la simple instruction

DataSet ch = new DataSet();

Prends 4 lignes et chez moi 1 seule !
Si tu vois pas ca change de jumelles !
Et si tu sais pas comment faire pour ecrire autrement alors je ne suis par competent pour t'aider

Le watch window est la fenetre de ton environnement de développement C# qui te permet de visualiser tes variables pendant le debuguage

Et si tu me demande c'est quoi C# ou c'est quoi mes variables ou c'est quoi le débuguage je ne suis plus compétent non plus..
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
3 mars 2008 à 16:58
Je suis pas con est incompéten au point de te demander ce qu'est C#....

Pas de ma faute si je connaissait pas le mot "Watch Windows" on a le droit d'apprendre, nn?? !!

Ensuite ma ligne : DataSet ch = new DataSet();   ne fais pas 4 lignes mais 2 lignes. Et j'en suis désolé je n'avais pas fais gaffe!!

Enfin bref je vois que j'emmerde mon monde avec mes difficultés et mes problèmes!! Suis désolé si chez moi ça fonctionne pas du premier coup!! Bref.

Cordialement Loic. en espérant que je vais m'en sortir à trouver ce putain de problème!!
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
3 mars 2008 à 17:21
Ne te fais pas de mal quant meme !

Accessoirement le debuguer et le watch windows te permettent de tracer pas a pas ce que tu fait et surtout ce que fait ton code (je ne sais pas le faire de chez moi pour toi)

D'autre part, ca fait deja plusieurs chose que tu n'avait pas vu ou pour lequelles tu n'avait pas "fait gaffe"

Fait donc un peu plus gaffe, sois plus attentif au déroulement logique de ce que tu ecrit c'est déja un bon chemin pour te sortir de ce putain de problème dans lequel tu traine depuis 3 jours et qui a mon avis peut etre reglé en 5 minutes avec des bons yeux, un minimum de compétence et tout ce que je t'ai deja dis !
0

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

Posez votre question
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
3 mars 2008 à 17:38
Ben j'ai déja fais le débugage c'est comme ça que j'ai pu en conclure qu'il ne rentrer pas dans les "if" et qu'il me disait que "ch = valeur non définie".

Donc je vois pas comment faire, comment résoudre mon problème.

Je vois pas comment utiliser le watch windows, c'est ça que je voulais savoir.

Cordialement.
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
3 mars 2008 à 17:51
Bon allez je reprends to code sans try sans catch

   SqlCommandBuilder cb =

new
SqlCommandBuilder(dataAdapter);  // dataadapter est il bien le bon ??
   DataSet ch =

new
DataSet(); 

// ch maintenant represente un dataset (cliqk droit watch)

   ch = ds.GetChanges(DataRowState.Deleted);  // ds est il bien celui que tu a utilisé au depart ??
                                                                                    // verifie ds.Table[0].Rows.Count; !!
                                                                                   


   if
(

null
!= ch)             // que vaut ch
   {


      int
del=dataAdapter.Update(ch);    
   }



    ch = ds.GetChanges(DataRowState.Modified);





    if
(ch !=

null
)            // que vaut ch
    {


       int
upd=dataAdapter.Update(ch); 
    }
   ch = ds.GetChanges(DataRowState.Added);


   if
(ch !=

null
)            // que vaut ch
   {


      int
add=dataAdapter.Update(ch); 
   }
}




 connection.Close();
 
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
3 mars 2008 à 18:10
DataSet ch = new

DataSet(); // ch maintenant represente un dataset (cliqk droit watch)
--> Lorsque je fais click droit, je n'est pas de "watch".

ch = ds.GetChanges(DataRowState.Deleted);  // ds est il bien celui que tu a utilisé au  depart ?? --> j'ai modifié ds en ds1 car ce nom étais déja utilisé donc pour être sur qu'il n'y es pas de confusion. Ainsi pareil pour dataAdapter. Mais le problème est toujours là.

 if(null!ch)             // que vaut ch   --> ch vaut "valeur non définie" vu qu'il n'atteint pas la ligne de "if" c'est à dire qu'a chaque fois il lit : ch ds1.GetChanges(DataRowState.Deleted);

puis il passe au dessus du "if". et quand je glisse ma souris il me dit : "ch = <valeur non définie>".

En gros lorsque je fais du debuggage, je vois que le curseur fait le chemin suivant :
 * SqlCommandBuilder cb =
new SqlCommandBuilder(dataAdapter1);

 * DataSet ch =
new DataSet();

 * ch = ds1.GetChanges(DataRowState.Deleted);
 * ch = ds1.GetChanges(DataRowState.Modified);
 * ch = ds1.GetChanges(DataRowState.Added);
 * connection.Close();

Voila.

merci d'avance!!
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
3 mars 2008 à 18:38
DataSet ch = new

DataSet(); // ch maintenant represente un dataset (cliqk droit watch)
--> Lorsque je fais click droit, je n'est pas de "watch".

Si tu ne sais pas comment faire un watch tu ne sais pas debugger
Et que vois tu exactement quand tu fais ub clikc droit sur ch ?

ch = ds.GetChanges(DataRowState.Deleted);  // ds est il bien celui que tu a utilisé au  depart ?? --> j'ai modifié ds en ds1 car ce nom étais déja utilisé donc pour être sur qu'il n'y es pas de confusion. Ainsi pareil pour dataAdapter. Mais le problème est toujours là.

Comme ca tu donne des noms au petit bonneur la chance ??
Je t'ai deja dis

1- TU DOIS utiliser le dataset qui a eté remplis lors du select
2- TU DOIS utiliser l'adapter qui a servi a ce select

Si tu ne sais pas comment faire, demande a celui qui a écrit ton programme qu'il t'explique !
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
3 mars 2008 à 18:52
que vois tu exactement quand tu fais ub clikc droit sur ch ? --> Tout d'abord si je sait faire un debugage. Ensuite, lorsque je fais clik droit j'ai plusieur possibilité :
  * couper
  * copier
  * coller
  * Supprimer le point d'arrêt
  * Désactiver le point d'arrêt
  * Propriétés des points d'arrêts
  * Nouveau point d'arrêt
  * Ajouter un espion
  * Espion express
  * ........

 Comme ca tu donne des noms au petit bonneur la chance ??  --> Non je ne donne pas des noms au petit bonheur la chance car j'ai bien évidement modifié dans la création du dataGrid c'est à dire :
SqlDataAdapter dataAdapter1 =
new SqlDataAdapter(RelationClientele, connection)
DataSet ds1 =
new DataSet();
dataAdapter1.Fill(ds1,"RelationClientele");
dataGrid2.DataSource = ds1;
dataGrid2.DataMember = "RelationClientele";

Donc voila la preuve que je réfléchi quand même!! Suis pas con a ce point enfin je crois!! ?? !!lol.

Sinon j'ai essayé de faire :
if(ds1!=null)
{
   MessageBox.Show("rien");
}
Et il m'affiche bien le message donc ds1 est différent de null. J'ai fais la même chose pour dataAdapter1 et c'est pareil.






merci d'avance!!
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
3 mars 2008 à 20:43
Quelle version de C# tu utilise ?

Moi j'ai 2005 et 2008 en Anglais

Et je n'ai PAS DU TOUT le meme menu contextuel que toi


Mais Ajouter un espion et espion express doit correspondre a Watch ( a force de tout vouloir traduire on ne trouve plus rien)


Personnelement j'utilise le DataGridView


Mais je continue a penser que tu n'utilise pas ds1 commun dans ton update ni l'adapter commun


mais commu tu n'envoie que des bouts de codes completement déstructurés en dehors de tout contexte ce n'est pas evident a pointer


Ou fais tu ton load ? dans quelle fonction ?

Ou fais tu ton update ?
Dans une autre fonction appelée par un event handler ?


 
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
4 mars 2008 à 10:57
Bonjour olibara,

J'utilise C#.Net 2003.

Ben c'est pas facil de t'afficher tout le code car j'ai d'autre combo.... que je remplis grâce a la base.

Donc pour le dataSet et dataAdapter voila ce que j'ai mit en commun :

public
class SuiviIntervention : System.Windows.Forms.Form{

private System.Windows.Forms.ComboBox NomClient;

private System.Windows.Forms.DataGrid dataGrid1;

private System.Windows.Forms.Label NumClt;

private System.Windows.Forms.Label NumInter;

private System.Windows.Forms.ComboBox LieuInter;

private System.Windows.Forms.Label RaisonInter;

private System.Windows.Forms.ComboBox EtatInter;

private System.Windows.Forms.DateTimePicker DatePriseCharge;

private System.Windows.Forms.DateTimePicker DateDisponibilité;

private System.Windows.Forms.DateTimePicker DateRécupération;

private System.Windows.Forms.TextBox ComPanne;

private System.Windows.Forms.TextBox ComRésolution;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.Label label2;

private System.Windows.Forms.Label label3;

private System.Windows.Forms.Label label4;

private System.Windows.Forms.Label label5;

private System.Windows.Forms.Label label6;

private System.Windows.Forms.Label label7;

private System.Windows.Forms.Label label8;

private System.Windows.Forms.Label label9;

private System.Windows.Forms.Label label10;

private System.Windows.Forms.Button Valider;

private System.Windows.Forms.ComboBox EtatPanne;

private System.Windows.Forms.Label label11;

private System.Windows.Forms.ComboBox CodPanne;

private System.Windows.Forms.Label label12;

public System.Windows.Forms.DataGrid dataGrid2;

private System.Windows.Forms.DataGridTableStyle dataGridTableStyle1;SqlConnection connection;
DataSet ds1 =

new DataSet();
SqlDataAdapter dataAdapter1 =
new SqlDataAdapter();

Voila preuve que j'ai mit ça en commun.

Ou fais tu ton load ? dans quelle fonction ? --> Si par là tu parle d'ou j'ai mit le code qui me permet de remplir le dataGrid je l'ai mit dans la fonction suivante :
private

void NumInter_TextChanged(
object sender, System.EventArgs e){
 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 dataAdapter1 =
new SqlDataAdapter(RelationClientele, connection);
         DataSet ds1 =
new DataSet();
         dataAdapter1.Fill(ds1,"RelationClientele");
         dataGrid2.DataSource = ds1;
         dataGrid2.DataMember = "RelationClientele";}

catch(Exception ex){MessageBox.Show(ex.ToString());}

finally{ connection.Close();}

Ou fais tu ton update ? Dans une autre fonction appelée par un event handler ? --> Pour l'enregistrement des modification, cela se fait dans :
private

void Valider_Click(
object sender, System.EventArgs e){

SqlCommandBuilder cb =
new SqlCommandBuilder(dataAdapter1);
DataSet ch =
new DataSet();
ch = ds1.GetChanges(DataRowState.Deleted);

if (
null != ch){
int Suppr=dataAdapter1.Update(ch);}
ch = ds1.GetChanges(DataRowState.Modified);

if (ch !=
null){ 
int Modif=dataAdapter1.Update(ch);}
ch = ds1.GetChanges(DataRowState.Added);

if (ch !=
null){
int ajout=dataAdapter1.Update(ch);}

Voila  je pense avoir répondu a toute tes questions.

merci d'avance!!
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
4 mars 2008 à 11:10
Non

La je ne vois pas ce qui peut empecher la mise a jour

Mais
1- As tu mis des espions pour suivre l'evolution de CH, le nombre de rows dans ds1 ? etc etc
2- Est tu certain que des modifs dans ton DGV ont érté faites

Deboguer demande aussi un peu d'intuition et une enquete minutieuse pas a pas
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
4 mars 2008 à 14:17
Lorsque je lance un espion sur CH, il me dit la chose suivante : 
   *  ch = ds1.GetChanges(DataRowState.Deleted); erreur : l'expression ne peut pas être évaluée à cause d'une erreur de syntaxe 
ainsi pour :
   *  DataSet ch = new DataSet(); erreur : l'expression ne peut pas être évaluée à cause d'une erreur de syntaxe 

Est tu certain que des modifs dans ton DGV ont érté faites --> Ben j'écris moi-même dans le dataGrid donc ui je suis sur des modif.

Es-ce que mon problème peut être du au fait que j'utilise qu'un dataGrid et non un DGV??

merci d'avance pour ton aide!!
0
lassaad83 Messages postés 148 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 1 décembre 2009
5 mars 2008 à 09:39
olibara "... Personnelement j'utilise le DataGridView ..."
loic20h28 "... peut être du au fait que j'utilise qu'un dataGrid ..."


Loic, tu est sur du Framework 1.0 tandis que olibara est sur du 2.0 ça n'a rien avoir... Tu ne peut pas faire (en majeure partie) ce que Olibara se permet de faire avec un DataGRidView.




Faudra accorder vos violons les amis pour trouver ze solution ...
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
5 mars 2008 à 09:49
A mon avis la solution est tres simple :

Aller de l'avant !!!
0
lassaad83 Messages postés 148 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 1 décembre 2009
5 mars 2008 à 10:07
Je confirme ce que tu dis olibara, mais il existe des application en 1.0 qui tourne encore ...
0
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
5 mars 2008 à 10:24
Quand ca tourne .....
et qu'il ne faut rien changer ......
Il n'y a rien a faire ...
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
5 mars 2008 à 10:31
Ok.


Mais comment je peux faire pour régler mon problème?? car j'arrête pas de chercher depuis hier soir mais rien ne fais!!


PS. : Si vous voulez que ce soit plus claire pour vous, je vous envoies ci-joint mon programme en espérant que vous pourriez-m'aider a trouver le problème!!
http://dl.free.fr/njGQmaSHx/Nouveaudossier.rar


s'il vous plait aider moi!!


Merci d'avance!!
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
6 mars 2008 à 09:52
Quelqu'un as-t'il une idée ca moi personnellement, j'ai beau chercher, réfléchir j'ai aucune idée.

Aider moi s'il vous plais!!

merci d'avance!!
0
loic20h28 Messages postés 207 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 22 février 2016 2
14 mars 2008 à 18:12
Bonjour tout le monde,

Voila j'ai décidé d'essayer une autre façon mais ça fonconne toujours pas.

Jai réalisé le code suivant :
...string requete =("SELECT * FROM RELATION_CLIENTELE");
SqlCommandBuilder cb=new SqlCommandBuilder (dataAdapter1);
dataAdapter1.SelectCommand=new SqlCommand(requete,connection);
dataAdapter1.Update(ds1, "dt");
connection.Close();

Grâce au suite suivant : http://www.sosordi.net/Depannage/690...s-base-donnees

faut savoir que pour remplir mon dataGrid a partir de la base je fais cela :...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=SNCK96400031;Initial Catalog=DistribInfo;Integrated Security=SSPI");

connection.Open();
try
{
   SqlDataAdapter dataAdapter1 = new SqlDataAdapter(RelationClientele, connection);
   DataSet ds1 = new DataSet();   
   dataAdapter1.Fill(ds1,"RelationClientele");
   dataGrid2.DataSource = ds1;
   dataGrid2.DataMember = "RelationClientele";
}
catch(Exception ex)
{
    MessageBox.Show(ex.ToString());
}
finally
{
    connection.Close();

...

<!-- END TEMPLATE: bbcode_code -->Cela se fait lorsque j'ai une TextBox qui est rempli(plus précisément : numInter).

Faut savoir également qu'en commun (public class SuiviIntervention : System.Windows.Forms.Form{....)j'ai mit :
SqlConnection connection;
DataSet ds1 = new DataSet();
SqlDataAdapter dataAdapter1 = new SqlDataAdapter();
SqlCommand command;
SqlDataReader rader;

Ce qui correspond au dataAdapter et dataSet de mon dataGrid.

Mon problème c'est qu'il me dit la chose suivante lorsque j'exécute mon application, plus précisémentlorsque je clique sur le bouton 'enregistrer'. :
"Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.data.dll.
Informations supplémentaires*: Impossible pour Update de trouver TableMappings['RelationClientele'] ou DataTable 'RelationClientele'. "

et il me surligne en vert : "dataAdapter1.Update(ds1, "RelationClientele");".

Lorsque je réalise un debugage, je m'apperçois que le résultat de ma requête est vide. Alors que mon dataGrid je l'ai modifié manuellement.

Ensuite, il passe sur la ligne 'SqlCommandBuilder cb=new SqlCommandBuilder (dataAdapter1);' et sur 'dataAdapter1.SelectCommand=new SqlComman(requete,connection);'. Mais arrivée à ' dataAdapter1.Update(ds1, "RelationClientele");' il m'affiche l'ereur précédement annoncé.

Merci d'avance pour votre aide.<!-- / message --><!-- sig -->
<!-- BEGIN TEMPLATE: bbcode_quote -->
0
Rejoignez-nous