IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]repercussion des modifications du dataset vers la BD


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Par défaut [C#]repercussion des modifications du dataset vers la BD
    Bonjour

    tout est dans le titre.
    Je tente de mettre a jour des champs d'un dataset et de repercuter les changements dans la BD mais ca ne marche pas.
    Je vois le rowState passé a Modified

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    		private void update_row()
    		{
    			// je recupere la clé de la table selectionnée
    			sqlConnection1.Open();
    			string req = "SELECT id_fichier FROM FICHIERS WHERE tableCorrespondante = '" + nomTable + "'";
    			SqlCommand requete = new System.Data.SqlClient.SqlCommand(req, sqlConnection1);
    			idFichier = (int)requete.ExecuteScalar(); 
    			sqlConnection1.Close();
     
    			try
    			{
    				sqlDataAdapterFichiers.Fill(dataSetFichiers1);
     
    				// on met à jour la bonne ligne grace a la clé
    				// dataSetFichiers1.FICHIERS.LoadDataRow();
     
    				DataSetFichiers.FICHIERSRow myRow = dataSetFichiers1.FICHIERS.FindByid_fichier(idFichier) ;
    				myRow.nom_fichier = System.IO.Path.GetFileName(txt_filePath.Text);
    				myRow.typeOrigineInfo = "" ;
    				myRow.chemin_absolu = txt_filePath.Text ;
    				myRow.type_generation = cbx_typeGene.Text ;
                                dataSetFichiers1.AcceptChanges();
     
    				save();
    			}
    			catch (Exception ex)
    			{
    				MessageBox.Show("Erreur dans la copie du nom");
    				MessageBox.Show(ex.Message);
    				return;
    			}
    		}
     
    		public void save()
    		{
    			try
    			{
    				// on met à jour la BD à partir du dataset
    				sqlDataAdapterFichiers.Update(dataSetFichiers1);
    				MessageBox.Show("Record successfully modified");	
    			}
    			catch(Exception ex)
    			{
    				MessageBox.Show("Error updating record\n" + ex.Message);
    				dataSetFichiers1.RejectChanges();
    				return ;
    			}
    		}
    J'execute pourtant AcceptChanges() puis Update() alors je ne comprends vraiment pas.

    Est-ce que je fais les choses dans le désordre ?
    Ou est-ce qu'il me manque quelquechose dans mon code ?

    merci pour votre aide

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Par défaut Attention !! AcceptChanges !!
    Salut,

    La première explication pourrait être à cause de ton premier AcceptChanges.

    En fait quand tu modifies, supprimes , ajoutes des lignes, elles sont marquées avec un attribut RowState. C'est grâce à ce rowstate que le sqlDataReader.Update() va pouvoir identifier les lignes qui doivent être mises à jour.

    Cependant , l'appel à AcceptChanges entraine que tous les RowState sont mis à UnChanged, et donc tu perds l'information clé !

    Fait d'abord ton update, puis ton acceptchanges.

    Si ca marche toujosur pas , alors rentre dans le code généré par la CodeDom et regarde la requête qui a été générée.

    a+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 55
    Par défaut
    ok tu as raison

    il faut d'abord faire le update() avant d'executer acceptChanges()

    update() fait les appels aux Select, Update et Delete correspondants
    acceptChanges() valide les modifs, càd remet le RowState à unchanged

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2014, 01h12
  2. Réponses: 0
    Dernier message: 09/11/2010, 17h42
  3. Réponses: 6
    Dernier message: 02/02/2010, 08h17
  4. Réponses: 9
    Dernier message: 23/11/2009, 17h23
  5. [CR7][VB6] Passer des infos de Vb vers CR
    Par tripper.dim dans le forum SDK
    Réponses: 2
    Dernier message: 13/11/2003, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo