18. august 2003 - 22:19Der 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
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?
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 ?
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.
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.
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.
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.