OVH Cloud OVH Cloud

Pb mise à jour d'enregistrement...

2 réponses
Avatar
Dominique
Bonjour,

J'ai un problème lors de la mise à jour d'un enregistrement d'une base de
données ACCESS :

+ si l'enregistrement a été cré par une page ASPX tout se passe bien,
+ si il a été cré directement dans ACcESS ou par une page ASP j'ai le
message suivant :

DBConcurrencyException: Violation de l'accès concurrentiel : UpdateCommand a
affecté 0 enregistrement

L'examen des enregistrement sous Access ne montre aucune différence...
Auriez vous des idées sur ce problème ?

Merci d'avance

Dominique
--------------------
procédure d'update :

private void DataList1_UpdateCommand(object source,
System.Web.UI.WebControls.DataListCommandEventArgs e)

{

//

// Make sure data are loaded

//

Bind () ;

DataListItem dt = (DataListItem)e.Item ;

Publication.PubEditControl PubEditControl1 = (Publication.PubEditControl)
dt.FindControl("PubEditControl1") ;

int nItem = e.Item.ItemIndex ;

PubEditControl1.Get (dataSetPubLab1.Publications.Rows[nItem]) ; //
DataList1.EditItemIndex]) ;

//

//

if (dataSetPubLab1.HasChanges())

{

DataRow[] modRows = dataSetPubLab1.Publications.Select(null, null,
DataViewRowState.ModifiedCurrent);

oleDbDataAdapter1.Update(modRows) ;

dataSetPubLab1.Clear () ;

}

DataList1.EditItemIndex = -1 ;

Bind () ;

}

2 réponses

Avatar
Benjamin Guinebertière [MS]
L'exception DBConcurrencyException est levée lorsque la commande d'update ne
modifie aucun enregistrement, typiquement parce qu'elle s'applique à un
enregistrement qui n'existe plus parce qu'il a été modifié par ailleurs.


Si votre enregistrement comporte un champ date/heure, et que vous avez un
paramètre de type dbDate, la mise à jour se fait uniquement sur la date et
non la date et l'heure. Dans ce cas, changer le type de OleDbType.DBDate en
OleDbType.Date peut résoudre le problème.

Voici une information complémentaire sur le sujet:
<<
Connecting through the Jet 4 OLEDB Provider, the OleDBDataAdapter wizard
generates
commands that use the parameter type DBDate when the Access database
contains a
Date/Time column. The DBDate type only stores the date, but not the time. As
a
result, the time information is lost when trying to update the
back-end. Therefore, the default value of the time (12:00:00 AM) is stored
in the
column.

To work around the problem, please manually change the data type from
OleDbType.DBDate to OleDbType.Date for the parameters of the commands
generated by
the wizard.







--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l’état, sans garantie d’aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.




"Dominique" wrote in message
news:
Bonjour,

J'ai un problème lors de la mise à jour d'un enregistrement d'une base de
données ACCESS :

+ si l'enregistrement a été cré par une page ASPX tout se passe bien,
+ si il a été cré directement dans ACcESS ou par une page ASP j'ai le
message suivant :

DBConcurrencyException: Violation de l'accès concurrentiel : UpdateCommand
a affecté 0 enregistrement

L'examen des enregistrement sous Access ne montre aucune différence...
Auriez vous des idées sur ce problème ?

Merci d'avance

Dominique
--------------------
procédure d'update :

private void DataList1_UpdateCommand(object source,
System.Web.UI.WebControls.DataListCommandEventArgs e)

{

//

// Make sure data are loaded

//

Bind () ;

DataListItem dt = (DataListItem)e.Item ;

Publication.PubEditControl PubEditControl1 = (Publication.PubEditControl)
dt.FindControl("PubEditControl1") ;

int nItem = e.Item.ItemIndex ;

PubEditControl1.Get (dataSetPubLab1.Publications.Rows[nItem]) ; //
DataList1.EditItemIndex]) ;

//

//

if (dataSetPubLab1.HasChanges())

{

DataRow[] modRows = dataSetPubLab1.Publications.Select(null, null,
DataViewRowState.ModifiedCurrent);

oleDbDataAdapter1.Update(modRows) ;

dataSetPubLab1.Clear () ;

}

DataList1.EditItemIndex = -1 ;

Bind () ;

}




Avatar
Dominique
C'est Parfait, Merci beaucoup

Dominique

"Benjamin Guinebertière [MS]" a écrit dans le
message de news:
L'exception DBConcurrencyException est levée lorsque la commande d'update
ne modifie aucun enregistrement, typiquement parce qu'elle s'applique à un
enregistrement qui n'existe plus parce qu'il a été modifié par ailleurs.


Si votre enregistrement comporte un champ date/heure, et que vous avez un
paramètre de type dbDate, la mise à jour se fait uniquement sur la date et
non la date et l'heure. Dans ce cas, changer le type de OleDbType.DBDate
en OleDbType.Date peut résoudre le problème.

Voici une information complémentaire sur le sujet:
<<
Connecting through the Jet 4 OLEDB Provider, the OleDBDataAdapter wizard
generates
commands that use the parameter type DBDate when the Access database
contains a
Date/Time column. The DBDate type only stores the date, but not the time.
As a
result, the time information is lost when trying to update the
back-end. Therefore, the default value of the time (12:00:00 AM) is stored
in the
column.

To work around the problem, please manually change the data type from
OleDbType.DBDate to OleDbType.Date for the parameters of the commands
generated by
the wizard.







--
Benjamin Guinebertière
Microsoft France

Ce message est fourni en l'état, sans garantie d'aucune sorte, et ne vous
confère aucun droit. Vous assumez tous les risques liés à son utilisation.




"Dominique" wrote in message
news:
Bonjour,

J'ai un problème lors de la mise à jour d'un enregistrement d'une base de
données ACCESS :

+ si l'enregistrement a été cré par une page ASPX tout se passe bien,
+ si il a été cré directement dans ACcESS ou par une page ASP j'ai le
message suivant :

DBConcurrencyException: Violation de l'accès concurrentiel :
UpdateCommand a affecté 0 enregistrement

L'examen des enregistrement sous Access ne montre aucune différence...
Auriez vous des idées sur ce problème ?

Merci d'avance

Dominique
--------------------
procédure d'update :

private void DataList1_UpdateCommand(object source,
System.Web.UI.WebControls.DataListCommandEventArgs e)

{

//

// Make sure data are loaded

//

Bind () ;

DataListItem dt = (DataListItem)e.Item ;

Publication.PubEditControl PubEditControl1 = (Publication.PubEditControl)
dt.FindControl("PubEditControl1") ;

int nItem = e.Item.ItemIndex ;

PubEditControl1.Get (dataSetPubLab1.Publications.Rows[nItem]) ; //
DataList1.EditItemIndex]) ;

//

//

if (dataSetPubLab1.HasChanges())

{

DataRow[] modRows = dataSetPubLab1.Publications.Select(null, null,
DataViewRowState.ModifiedCurrent);

oleDbDataAdapter1.Update(modRows) ;

dataSetPubLab1.Clear () ;

}

DataList1.EditItemIndex = -1 ;

Bind () ;

}