Bdd: Impossible d'updater ma base.

Résolu
Sam0ss Messages postés 3 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 9 décembre 2008 - 9 déc. 2008 à 03:33
Sam0ss Messages postés 3 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 9 décembre 2008 - 9 déc. 2008 à 03:43
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

Sam0ss Messages postés 3 Date d'inscription vendredi 3 octobre 2008 Statut Membre Dernière intervention 9 décembre 2008
9 déc. 2008 à 03:43
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.
3
Rejoignez-nous