Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bug du .NET ? DBConcurrencyException lors de l'appel de la méthode DbDataAdpter.Update()

3 réponses
Avatar
Gilles TOURREAU
Je suis sous SQL 2005.

J'ai un DataTable que je rempli à l'aide d'un DataAdapter et d'un
CommandBuilder.
Une fois rempli, je supprime une ligne d'une table à l'aide la méthode
.Delete() cela permet de répercuter les modification au prochain appel de
Adapter.Update();

Lorsque j'appel cette méthode, j'ai une exception qui se déclenche
"DBConncurrencyException : Concurrency violation: the DeleteCommand affected
0 of the expected 1 records."

Cette exception est déclenché car la commande Delete généré par
CommandBuilder à effacé aucune ligne.
J'ai donc regardé avec le Profiler de SQL 2005 la commande qui était
executée :

exec sp_executesql N'DELETE FROM ......................

J'ai fais un copier/coller de cette commande vers SQL Server Management
Studio, je l'execute, et là, SQL 2005 me dit qu'une ligne vient d'être
effacé (1 row affected(s)) !!!
D'où vient cette erreur ? Serait-ce un bug au niveau de .NET ?

En vous remerciant par avances de vos lumières...

--
Gilles TOURREAU
Responsable Informatique
gilles.tourreau@pos.fr

Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

3 réponses

Avatar
Med Bouchenafa
C'est un peu violent pour etre un bug...
Une idee serait de faire un catch de cette exception et de regader plus en
details les elements de cette instance
L'objet DBConcurrencyException est tres riche en proprietes et membres

catch (DBConcurrencyException ex)
{
string ErrorMsg;
ErrorMsg = exMessage;
ErrorMsg += ex.Row[0].ToString();
ErrorMsg += ...
....
}


"Gilles TOURREAU" wrote in message
news:%
Je suis sous SQL 2005.

J'ai un DataTable que je rempli à l'aide d'un DataAdapter et d'un
CommandBuilder.
Une fois rempli, je supprime une ligne d'une table à l'aide la méthode
.Delete() cela permet de répercuter les modification au prochain appel de
Adapter.Update();

Lorsque j'appel cette méthode, j'ai une exception qui se déclenche
"DBConncurrencyException : Concurrency violation: the DeleteCommand
affected 0 of the expected 1 records."

Cette exception est déclenché car la commande Delete généré par
CommandBuilder à effacé aucune ligne.
J'ai donc regardé avec le Profiler de SQL 2005 la commande qui était
executée :

exec sp_executesql N'DELETE FROM ......................

J'ai fais un copier/coller de cette commande vers SQL Server Management
Studio, je l'execute, et là, SQL 2005 me dit qu'une ligne vient d'être
effacé (1 row affected(s)) !!!
D'où vient cette erreur ? Serait-ce un bug au niveau de .NET ?

En vous remerciant par avances de vos lumières...

--
Gilles TOURREAU
Responsable Informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



Avatar
SM
Avant d'appeler la methode Delete() est ce que vous avez verifié que le
record existe bien dans le BD ? pour les records insérés mais non encore
commités il faut appeler plutot la methode Remove().


"Gilles TOURREAU" wrote in message
news:%
Je suis sous SQL 2005.

J'ai un DataTable que je rempli à l'aide d'un DataAdapter et d'un
CommandBuilder.
Une fois rempli, je supprime une ligne d'une table à l'aide la méthode
.Delete() cela permet de répercuter les modification au prochain appel de
Adapter.Update();

Lorsque j'appel cette méthode, j'ai une exception qui se déclenche
"DBConncurrencyException : Concurrency violation: the DeleteCommand


affected
0 of the expected 1 records."

Cette exception est déclenché car la commande Delete généré par
CommandBuilder à effacé aucune ligne.
J'ai donc regardé avec le Profiler de SQL 2005 la commande qui était
executée :

exec sp_executesql N'DELETE FROM ......................

J'ai fais un copier/coller de cette commande vers SQL Server Management
Studio, je l'execute, et là, SQL 2005 me dit qu'une ligne vient d'être
effacé (1 row affected(s)) !!!
D'où vient cette erreur ? Serait-ce un bug au niveau de .NET ?

En vous remerciant par avances de vos lumières...

--
Gilles TOURREAU
Responsable Informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr




Avatar
Gilles TOURREAU
Oui, l'enregistrement existe bien avant et après mon Delete() dans ma base
de données SQL Server.

Cordialement

--
Gilles TOURREAU
Responsable Informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
"SM" a écrit dans le message de news:

Avant d'appeler la methode Delete() est ce que vous avez verifié que le
record existe bien dans le BD ? pour les records insérés mais non encore
commités il faut appeler plutot la methode Remove().


"Gilles TOURREAU" wrote in message
news:%
Je suis sous SQL 2005.

J'ai un DataTable que je rempli à l'aide d'un DataAdapter et d'un
CommandBuilder.
Une fois rempli, je supprime une ligne d'une table à l'aide la méthode
.Delete() cela permet de répercuter les modification au prochain appel de
Adapter.Update();

Lorsque j'appel cette méthode, j'ai une exception qui se déclenche
"DBConncurrencyException : Concurrency violation: the DeleteCommand


affected
0 of the expected 1 records."

Cette exception est déclenché car la commande Delete généré par
CommandBuilder à effacé aucune ligne.
J'ai donc regardé avec le Profiler de SQL 2005 la commande qui était
executée :

exec sp_executesql N'DELETE FROM ......................

J'ai fais un copier/coller de cette commande vers SQL Server Management
Studio, je l'execute, et là, SQL 2005 me dit qu'une ligne vient d'être
effacé (1 row affected(s)) !!!
D'où vient cette erreur ? Serait-ce un bug au niveau de .NET ?

En vous remerciant par avances de vos lumières...

--
Gilles TOURREAU
Responsable Informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr