Avatar billede mogli Nybegynder
18. august 2003 - 22:19 Der er 4 kommentarer og
1 løsning

håndtere concurrency

Hej allesammen.

Hvordan kan jeg bedst håndtere concurrency i C#. Jeg har en applikation hvor jeg igennem nogle datasets hente kunder. Disse ligger jeg så i et listarray, som jeg bruger i GUI'en. Hvordan kan jeg den anden vej, f.eks ved at jeg ændrer i en kunde, håndtere den samtidighed der kan være, hvis en anden har ændret i den samme kunde på samme tid?

Skal jeg gøre det på en anden måde en datasets? Jeg bruger mssql 2000. Lige nu er min forbindelse igennem et databaseinterface, hvor jeg har alle mine sql kommandoer anbragt. Disse kalder jeg så igennem en Updatemetode. Det er vel i denne det skal laves hvis det er. Har set et eks. på msdn, men der bruges dataadapteres direkte i GUI'en, og det er jeg ikke interresseret i
Avatar billede mogli Nybegynder
18. august 2003 - 22:21 #1
Må hellere lige tilføje at jeg i den arrayliste gemmen kundeobjekter. Når jeg så vælger den i et listview, så tager jeg bare den pågældende kunde og viser attributterne i forskellige textboxes. Det er så i disse jeg ændrer. Men hvordan vil det så være bedst at gøre derfra?
Avatar billede arne_v Ekspert
18. august 2003 - 22:36 #2
Er det korrekt forstået at det problem du ønsker at løse er
det klassiske:
* 2 brugere sidder og redigere dat i databasen
* bruger A loader record X
* bruger B loader record X
* bruger A tænker 10 minutter over rettelserne
* bruger B tænker 5 mnutter over rettelserne
* bruger B gemmer record X
* bruger A gemmer record X
* bruger B's rettelser er forsvundet sporløst
?
Avatar billede netpxg Nybegynder
18. august 2003 - 22:41 #3
Har jeg forstået det rigtigt ? Du læser data fra en database ind i en tabel og forskellige processer kan uafhængigt af hinanden læse og skrive i den tabel ?
Så bliver du nødt til at opfinde en låsemekanisme, så data under opdatering bliver låst indtil den pågældende proces er færdig og andre processer venter/opgiver hvis de vil til samme data. Det er ikke helt enkelt, man skal selvfølgelig husk at fjerne låsen, hvis den af en eller anden grund ikke bliver fjernet vil det være rart at kunne se hvorfor osv. Kender ikke mssql, men vil faktisk at den indeholdt en låsemekanisme, så den kan styre det for dig.
Avatar billede arne_v Ekspert
18. august 2003 - 22:47 #4
Hvis jeg har forstået det korrekt så er den rigtige løsning at
bruge et version number pattern.

Du tilføjer et felt i databasen med version af recorden.

Og når der gemmes så gemmes der kun hvis version nummeret er det
samme som det oprindelige og samtidig med rettelsen lægger man en
til versions nummeret.

Den operation skal naturligvis foregå atomisk men det er der
gode mekanismer til at sikre fordi den skal overståes på
millisekunder.

Hvis gem fejler på denn konto skal brugeren (A i mit eksempel) naturligvis
informeres.

Derimod er det yderst problemtisk at låse records som folk vil sidde
og holde på i 5 eller 10 minutter, muligvis beslutter ikke at gemme og
muligvis mister forbidnelsen til databasen.
Avatar billede mogli Nybegynder
18. august 2003 - 23:16 #5
Hej arne. Det er lige netop den problemstilling som jeg mener. Hvor der er to eller flere brugere ved hver deres maskine, der sidder ogredigere i den samme db. uafhængigt af hinanden.
Har i mellemtiden siddet og kigget lidt rundt, og tror at jeg benytter den indbyggede ADO.Net som kan klare concurrencyhandling selv. så er det bare lige hvordan jeg får den implementeret. Det er hvor man bruger en Dataadapter til at tjekke på ens DataSet om der er ændringer og så finder den selv ud af om man skal Update/Delete/.....
Nogen forslag til implementeringen? Kan jeg koble et Dataset direkte til et listview eller?
Ellers tak for svarene. Lader lige spg. stå åbent endnu, hvis der skulle komme forslag til mig nye spg.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester