Bdd: Impossible d'updater ma base. [Résolu]

Signaler
Messages postés
3
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
9 décembre 2008
-
Messages postés
3
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
9 décembre 2008
-
Bonjour!

bon voilà, çà commence à faire un bout de temps que je suis bloqué par un problème d'update d'une table SQL server express 2005.
Je m'explique:
    J'ai une procédure stockée qui me retourne une ligne de ma table. Je récupére cette ligne dans un dataset, je la mets en forme et  la récupére dans une classe métier. Je fait mes modifs dessus, et aprés je veux "updater" dans la base. Là je repasse mon objet métier en dataset et le donne à un SqlDataAdapter pour enregistrer les modifications. Je fournis à mon SqlDataAdapter toutes les conmandes necessaires de select, update, delete et insert qui sont des procédures stockées (toutes sont testées et fonctionnent). Le problème c'est que le dataset que je récupére est formé d'1 table avec une seule ligne (jusque là normal), mais que cette ligne a un rowstate égale à "Added", ce qui fait que j'ajoute cette ligne au lieu de l' "updater".... et là je ne vois pas comment faire. Et surtout, je ne comprends pas comment celà est possible, car ma ligne est identifiée avec une PK et donc l'update .... je vous mets mon code pour que vous y voyez plus clair, mais surtout n'hésitez pas à poser des questions! ;)

#region SELECT_CAND command => GetCand
            SqlCommand GetCand = new SqlCommand("GET_CAND_BY_ID", connection);
            GetCand.CommandType = CommandType.StoredProcedure;
            GetCand.CommandText = "GET_CAND_BY_ID";
            GetCand.Parameters.Add("@CAND_ID", SqlDbType.Int);
            GetCand.Parameters["@CAND_ID"].SourceColumn = "CAND_ID";
            //GetCand.Parameters["@CAND_ID"].Value = id;
            #endregion

            #region UPDATE_CAND command => SetCand
            SqlCommand SetCand = new SqlCommand("UPDATE_CANDIDAT", connection);           
            SetCand.CommandType = CommandType.StoredProcedure;
            SetCand.CommandText = "UPDATE_CANDIDAT";
            SetCand.Parameters.Add("@CAND_ID", SqlDbType.Int);
            SetCand.Parameters["@CAND_ID"].SourceColumn = "CAND_ID";
            ......         
            ......
            #endregion

            #region DELETE_CAND command => DelCand
            SqlCommand DelCand = new SqlCommand("DELETE_CANDIDAT", connection);
            DelCand.CommandType = CommandType.StoredProcedure;
            DelCand.CommandText = "DELETE_CANDIDAT";
            DelCand.Parameters.Add("@CAND_ID", SqlDbType.Int);
            DelCand.Parameters["@CAND_ID"].SourceColumn = "CAND_ID";
            #endregion

            #region INSERT_CAND command => InsertCAND
            SqlCommand InsertCAND = new SqlCommand("INSERT_CANDIDAT", connection);
            InsertCAND.CommandType = CommandType.StoredProcedure;
            InsertCAND.CommandText = "INSERT_CANDIDAT";           
            InsertCAND.Parameters.Add("@CAND_NOM", SqlDbType.VarChar);
            InsertCAND.Parameters["@CAND_NOM"].SourceColumn = "CAND_NOM";
            InsertCAND.Parameters.Add("@CAND_PRENOM", SqlDbType.VarChar);
            InsertCAND.Parameters["@CAND_PRENOM"].SourceColumn = "CAND_PRENOM";
            ....
             .....
            #endregion

            connection.Open();
           
            using (SqlDataAdapter monAdaptateur = new SqlDataAdapter())
            {
                monAdaptateur.SelectCommand = GetCand;
                monAdaptateur.UpdateCommand = SetCand;
                monAdaptateur.DeleteCommand = DelCand;
                monAdaptateur.InsertCommand = InsertCAND;

                monAdaptateur.Update(ds,"T_CANDIDAT");
            }
            connection.Close();
        }

merci d'avance pour votre génereuse participation! ;)

Sam0ss.

1 réponse

Messages postés
3
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
9 décembre 2008

bon ok, je vais me coucher.... il suffisait de poster un message pour que je tombe sur une réponse 2sec après! Enfin bref pour ceux que çà interesse, voici une solution:

ds.AcceptChanges();
ds.Tables["...."].Rows[0].SetModified();

et aprés on passe par l'update...

Voilou...

Sam0ss.