Jeg går ud fra, at dit com objekt er af typen SqlCommand. I dokumentationen for ExecuteNonQuery på den står, at SqlException kastes, nåt 'An exception occurred while executing the command against a locked row'.
Så kunne det tænkes at problemet skyldes at du har flere opdateringer til samme uid umiddelbart efter hinanden? Så kunne man forestille sig at opdateringerne håndteres af forskellige tråde i SQL Serveren, og at de kommer i vejen for hinanden.
En løsning kunne i så fald være at løben din evts collection igennem og fjerne dobbelt-opdateringer af samme uid (hvis det er OK).
Har du meddelelsesteksten i den exception, du får? Og kan du af den se, om det er et locking-problem?
Jeg tror du har halt ret i SQL server og håndteringen, men der er netop kun et UID, min collection er på forhånd blevet trimmet for dobbelte opdateringer.
Det er lidt sjovt med denne exception, der er ikke mere information end det jeg har givet, ingen stacktrace, og meddelelsesteksten er netop "System error".
OK, jeg tror vi er på rette spor. SQL låser som udgangspunkt en side (page) ad gangen. En page er 8K, så hvis du har en smal tabel, kan det svare til ganske mange rækker.
Du kan forsøge med at ændre låsestrategi ved at specificere at din update skal ske med RowLock:
update MyTable with (rowlock) set <whatever> where <whatever>
NB! Hvis du prøver dette, skal du lige være opmærksom på memory forbruget i din SQL server - rowlocking bruger noget mere memory end pagelocking.
Jeg syntes i øvrigt det er svært at finde noget i onlinebooks omkring emnet, men tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.