OVH Cloud OVH Cloud

RowState après Update sur INsertCommand

1 réponse
Avatar
phrscx
Mon problème se pose lors de la gestion des conflits de mise à jour d'une
base de données Access
à partir d'un DataSet via un OleDbDataAdapter, dans le cas de l'insertion de
nouvelles lignes.
Dans le cas d'une mise à jour réussie sur modification ou sur suppression de
lignes,
la propriété RowState des lignes mouvementées est bien réinitialisée à
Unchanged.
Dans le cas d'une mise à jour réussie ou non sur ajout de lignes, la
propriété
RowState des lignes mouvementées conserve la valeur Added.

Il s'ensuit qu'on ne peut se fier à cette propriété pour savoir si l'ajout
c'est bien déroulé ou non.


Exemple de mise à jour sur modification :

MesModifs = MesDonnees.Tables("TMPers").GetChanges(DataRowState.Modified)
If Not MesModifs Is Nothing Then
MaCommande = New OleDbCommand("UPDATE TMPers SET NomPers = ?, XIdLoc = ?
WHERE (IdPers = ?)", MaConnexion)
Param = New OleDbParameter
Param.SourceColumn = MesModifs.Columns("NomPers").ColumnName
MaCommande.Parameters.Add(Param)
Param = New OleDbParameter
Param.SourceColumn = MesModifs.Columns("XIdLoc").ColumnName
MaCommande.Parameters.Add(Param)
Param = New OleDbParameter
Param.SourceColumn = MesModifs.Columns("IdPers").ColumnName
MaCommande.Parameters.Add(Param)
MaConnexionTmp.UpdateCommand = MaCommande
MaConnexionTmp.Update(MesModifs)
MesModifs.Reset()
End If


Exemple de mise à jour sur ajout :

MesModifs = MesDonnees.Tables("TMPers").GetChanges(DataRowState.Added)
If Not MesModifs Is Nothing Then
MaCommande = New OleDbCommand("INSERT INTO TMPers (IdPers, NomPers,
XIdLoc) VALUES (?, ?, ?)", MaConnexion)
For Each C As DataColumn In MesModifs.Columns
Param = New OleDbParameter
Param.SourceColumn = C.ColumnName
MaCommande.Parameters.Add(Param)
Next
MaConnexionTmp.InsertCommand = MaCommande
MaConnexionTmp.Update(MesModifs)
MesModifs.Reset()
End If


Alors, voici la question finale : Qu'en est-il de cette valeur Added de
RowState ?

1 réponse

Avatar
phrscx
Merci d'avoir lu la question, mais laisse tomber : c'était un faux problème,
l'exemple est mal conçu.

phrscx

"phrscx" a écrit :

Mon problème se pose lors de la gestion des conflits de mise à jour d'une
base de données Access
à partir d'un DataSet via un OleDbDataAdapter, dans le cas de l'insertion de
nouvelles lignes.
Dans le cas d'une mise à jour réussie sur modification ou sur suppression de
lignes,
la propriété RowState des lignes mouvementées est bien réinitialisée à
Unchanged.
Dans le cas d'une mise à jour réussie ou non sur ajout de lignes, la
propriété
RowState des lignes mouvementées conserve la valeur Added.

Il s'ensuit qu'on ne peut se fier à cette propriété pour savoir si l'ajout
c'est bien déroulé ou non.


Exemple de mise à jour sur modification :

MesModifs = MesDonnees.Tables("TMPers").GetChanges(DataRowState.Modified)
If Not MesModifs Is Nothing Then
MaCommande = New OleDbCommand("UPDATE TMPers SET NomPers = ?, XIdLoc = ?
WHERE (IdPers = ?)", MaConnexion)
Param = New OleDbParameter
Param.SourceColumn = MesModifs.Columns("NomPers").ColumnName
MaCommande.Parameters.Add(Param)
Param = New OleDbParameter
Param.SourceColumn = MesModifs.Columns("XIdLoc").ColumnName
MaCommande.Parameters.Add(Param)
Param = New OleDbParameter
Param.SourceColumn = MesModifs.Columns("IdPers").ColumnName
MaCommande.Parameters.Add(Param)
MaConnexionTmp.UpdateCommand = MaCommande
MaConnexionTmp.Update(MesModifs)
MesModifs.Reset()
End If


Exemple de mise à jour sur ajout :

MesModifs = MesDonnees.Tables("TMPers").GetChanges(DataRowState.Added)
If Not MesModifs Is Nothing Then
MaCommande = New OleDbCommand("INSERT INTO TMPers (IdPers, NomPers,
XIdLoc) VALUES (?, ?, ?)", MaConnexion)
For Each C As DataColumn In MesModifs.Columns
Param = New OleDbParameter
Param.SourceColumn = C.ColumnName
MaCommande.Parameters.Add(Param)
Next
MaConnexionTmp.InsertCommand = MaCommande
MaConnexionTmp.Update(MesModifs)
MesModifs.Reset()
End If


Alors, voici la question finale : Qu'en est-il de cette valeur Added de
RowState ?