sql >> Database >  >> RDS >> PostgreSQL

Er is een DBConcurrency-uitzondering opgetreden tijdens het bijwerken met behulp van Dataadapter

Dit komt omdat DataAdapter gebruikt Optimistic Concurrency standaard. Dit betekent dat als u een rij probeert bij te werken die niet meer in de database bestaat of is gewijzigd, de update van de DataAdapter zal mislukken met de uitzondering hierboven.

Mogelijke scenario's :

  • Tussen het selecteren van de gegevens in de client en het verzenden van de update, verwijdert of updatet een andere gebruiker deze rij uit zijn applicatie.
  • Het kan zijn dat u de gegevens ergens anders in uw toepassing verwijdert.

Bijvoorbeeld :

  1. U vult de DataTable dat zal worden gebruikt voor de update.
  2. Verwijdert de rij met Code = 1101 (bijvoorbeeld) rechtstreeks uit de database, d.w.z. u gebruikt de DataTable niet hier. Dit emuleert een andere gebruiker die de rij verwijdert met Code = 1101 van een andere applicatie. Of een ander deel van uw code dat de rij verwijdert met Code = 1101 .
  3. Selecteert de rij met Code = 1101 uit de DataTable , dit is alleen om te laten zien dat het er nog steeds is, ook al heb je het uit de database zelf verwijderd.
  4. Bewerkt de Quantity kolom in de rij met Code = 1101 in de DataTable . Dit moet worden gedaan, anders negeert de oproep tot Update deze rij bij het updaten.
  5. Voert de update uit, hierdoor wordt de uitzondering gegenereerd omdat u een rij probeert bij te werken die (niet meer) in de database bestaat.

Als u Last Writer Wins . wilt implementeren , Voeg de volgende code toe:

cb.ConflictOption = ConflictOption.OverwriteChanges;

Er is ook nog iets mogelijk:als je Decimal . hebt /numeric als kolommen in de DB kunnen ze deze fout veroorzaken, ook al zien de gegevens er hetzelfde uit. Dit komt door een fout bij het afronden van decimalen.

Een belangrijke opmerking :Gebruik altijd parameterized queries trouwens. Dit soort aaneenschakeling van tekenreeksen staat open voor SQL Injection .




  1. De uitvoer van het SQL Developer-script kapt de breedte van sys_refcursor af

  2. Detecteren of een waarde ten minste één numeriek cijfer bevat in MySQL

  3. Inleiding tot SQL-opdrachten

  4. Hoe het gemiddelde van een kolom te berekenen en het vervolgens op te nemen in een selectiequery in Oracle?