sql >> Database teknologi >  >> RDS >> PostgreSQL

DBConcurrency-undtagelse opstod under opdatering ved hjælp af dataadapter

Dette er fordi DataAdapter bruger Optimistic Concurrency som standard. Det betyder, at hvis du forsøger at opdatere en række, der ikke længere eksisterer i databasen eller ændret, vil opdateringen fra DataAdapter vil mislykkes med undtagelsen ovenfor.

Mulige scenarier :

  • Mellem du vælger data til klienten og sender opdateringen, sletter eller opdaterer en anden bruger denne række fra sin applikation.
  • Det kan være, at du sletter dataene fra et andet sted i din applikation.

For eksempel :

  1. Du udfylder DataTable der vil blive brugt til opdateringen.
  2. Sletter rækken med Code = 1101 (for eksempel) direkte fra databasen, dvs. du bruger ikke DataTable her. Dette emulerer en anden bruger, der sletter rækken med Code = 1101 fra en anden applikation. Eller en anden del af din kode, der sletter rækken med Code = 1101 .
  3. Vælger rækken ud med Code = 1101 fra DataTable , dette er blot for at vise, at det stadig er der, selvom du har slettet det fra selve databasen.
  4. Redigerer Quantity kolonne i rækken med Code = 1101 i DataTable . Dette skal gøres, ellers vil opkaldet til opdatering ignorere denne række ved opdatering.
  5. Udfører opdateringen, dette vil kaste undtagelsen, da du forsøger at opdatere en række, der (ikke længere) eksisterer i databasen.

Hvis du vil implementere Last Writer Wins , Tilføj følgende kode:

cb.ConflictOption = ConflictOption.OverwriteChanges;

Der er også en mulig ting mere:hvis du har Decimal /numeric som kolonner i DB kan de forårsage denne fejl, selvom dataene ser ens ud. Dette skyldes en decimalafrundingsfejl.

En vigtig bemærkning :Du bør altid bruge parameterized queries i øvrigt. Denne slags strengsammenkædninger er åbne for SQL Injection .




  1. Saml kolonner med yderligere (særskilte) filtre

  2. Script hele databasen SQL-Server

  3. SQL-forespørgsel til at oversætte en liste over tal, der matches mod flere intervaller, til en liste med værdier

  4. Brug af ADO asynkront i Microsoft Access for at fremskynde formularer