PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wystąpił wyjątek DBConcurrency podczas aktualizacji za pomocą adaptera danych

Dzieje się tak, ponieważ DataAdapter używa Optimistic Concurrency domyślnie. Oznacza to, że jeśli próbujesz zaktualizować wiersz, który już nie istnieje w bazie danych lub został zmieniony, aktualizacja z DataAdapter zawiedzie z powyższym wyjątkiem.

Możliwe scenariusze :

  • Pomiędzy wybraniem danych do klienta i wysłaniem aktualizacji inny użytkownik usuwa lub aktualizuje ten wiersz ze swojej aplikacji.
  • Może być tak, że usuwasz dane z innego miejsca w swojej aplikacji.

Na przykład :

  1. Wypełniasz DataTable które zostaną użyte do aktualizacji.
  2. Usuwa wiersz z Code = 1101 (na przykład) bezpośrednio z bazy danych, tzn. nie używasz DataTable tutaj. Jest to emulacja innego użytkownika usuwającego wiersz za pomocą Code = 1101 z innej aplikacji. Lub jakaś inna część kodu usuwająca wiersz z Code = 1101 .
  3. Wybiera wiersz z Code = 1101 z DataTable , ma to na celu pokazanie, że nadal tam jest, mimo że usunąłeś go z samej bazy danych.
  4. Edytuje Quantity kolumna w wierszu z Code = 1101 w DataTable . Należy to zrobić, w przeciwnym razie wywołanie Update zignoruje ten wiersz podczas aktualizacji.
  5. Wykonuje aktualizację, spowoduje to zgłoszenie wyjątku, ponieważ próbujesz zaktualizować wiersz, który (już) nie istnieje w bazie danych.

Jeśli chcesz zaimplementować Last Writer Wins , Dodaj następujący kod:

cb.ConflictOption = ConflictOption.OverwriteChanges;

Jest jeszcze jedna możliwa rzecz:jeśli masz Decimal /numeric jako kolumny w DB mogą powodować ten błąd, nawet jeśli dane wyglądają tak samo. Wynika to z błędu zaokrąglania dziesiętnego.

Ważna uwaga :Zawsze należy używać parameterized queries Przy okazji. Tego rodzaju konkatenacje ciągów są otwarte dla SQL Injection .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. błąd instrukcji sql:kolumna .. nie istnieje

  2. Co to jest PostgreSQL?

  3. Agent PostgreSQL ponownie w komisji SQL Standard

  4. Wywołanie procedury składowanej w ramach procedury składowanej

  5. Optymalizacja zapytań w PostgreSQL. WYJAŚNIJ podstawy – część 3