[C# .NET] Database applicatie, datahandle principe

Pagina: 1
Acties:

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Ik ben met een database applicatie bezig in Visual C# 2005 Express alleen ik loop tegen een probleempje aan. Ik weet niet precies hoe ik de data in de applicatie synchroon hou met de database. Ik gebruik een typed DataSet om data op te slaan. Ik vind heel veel info en voorbeeld code op internet maar daar vind ik niet waar ik naar zoek.

Ik heb nu het volgende bedacht:

- Ik laad alle data uit de database en zet die in een DataSet bij het starten van de applicatie. Die DataSet gebruik ik door heel de applicatie om bijvoorbeeld Forms van data te voorzien. Wanneer er een verandering plaats gevonden heeft en de gebruiker drukt `opslaan` dat ik dmv een DataAdapter de data update.

Dit is heel makkelijk natuurlijk, maar wanneer er een andere gebruiker in de database veranderingen doet dan kan de data die bij het opstarten van de applicatie is geladen niet meer het zelfde zijn als in de database. Dat merk je pas hij het updaten dus kan de weergegeven data die NIET veranderd is, al lang in de database veranderd zijn.

Dat kan je dan oplossen om ééns in de zoveel tijd alle data up-te-daten maar dat heeft ook weer nadelen denk ik.
Ik vraag me af of dit een goede methode is of dat ik misschien iets over het hoofd zie of compleet op het verkeerde spoor zit. En hoe jullie het doen natuurlijk ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Enkel de data ophalen als je ze nodig hebt.

https://fgheysels.github.io/


  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Ok, klinkt ook het handigst maar als de gebruiker van de applicatie bijvoorbeeld een overzicht van alle gebruikers uit de database voor zicht heeft in een Form, en dan opent de gebruiker een zoekschermpje en zoek op gebruikers met een filter. Dus bijvoorbeeld alleen alle gebruikers die met een A beginnen. En tussen het openen van het overzicht en het zoekscherm heeft een andere gebruiker veranderingen gedaan in de tabel gebruikers. Dan komt de data in het overzicht niet overeen met de data in de zoekresultaten.

Is dat gewoon jammer of is daar een handige oplossing voor?

  • Mawlana
  • Registratie: Juli 2002
  • Laatst online: 13:27
Afhankelijk van de data die je wil (kunnen) wijzigen zou je je database kunnen "locken" voor gedurende X aantal minuten. Op deze manier kan een andere gebruiker enkel de gegevens inzien.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Gebruikelijker is volgens mij gegevens ophalen, gegevens wijzigen, writelock, kijken of de actuele gegevens overeen komen met de laatst opgehaalde gegevens (zoja: niets aan de hand, anders: conflict), opslaan, lock releasen.

Ofzoiets.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
sylvesterrr schreef op vrijdag 09 maart 2007 @ 12:39:
Afhankelijk van de data die je wil (kunnen) wijzigen zou je je database kunnen "locken" voor gedurende X aantal minuten. Op deze manier kan een andere gebruiker enkel de gegevens inzien.
Da's goed voor de performance en de user experience .. :X

Als de gegevens gewijzigd zijn, tja, dan is dat zo. Als een gebruiker dan kiest om een bepaalde klant te gaan editten, haal je de gegevens van die klant op uit de DB. Op die manier heb je de recentste gegevens.
Als er ondertussen iemand anders de gegevens van diezelfde klant wijzigt terwijl jij ze wijzigt, en ze opslaat, tja, dan heb jij pech. Dan kan je systeem zeggen: de gegevens zijn ondertussen al gewijzigd door iemand anders; of, je systeem kan gewoon de reeds gedane wijzigingen gewoon overschrijven. (last update wins). Wat je kiest, hangt af van je requirements.
tipje: zoek eens op optimistic concurrency

[ Voor 17% gewijzigd door whoami op 09-03-2007 12:45 ]

https://fgheysels.github.io/


  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Dat afhandelen van veranderde data bij het updaten gaat wel lukken, ik gebruik een typed DataSet die ik met die leuke DataSet desinger van VS2005 maak en die gebruikt al optimistic concurrency.

Ik zit meer met het volgende:

Wanneer ik een overzicht van gebruikers ophaal in m’n applicatie, dan wordt de data opgehaald van de database.
Vervolgens open ik een ander overzicht die ook gebruikersdata bevat uit. Daarvoor wordt ook data opgehaald van de database.
Nu staan er dus twee overzichten voor me op m’n scherm en ik heb niks gewijzigd.

Stel, tussen het openen van het eerste en het tweede overzicht is de data veranderd in de database. Dan geven beide overzichten de zelfde records weer, maar niet de zelfde data.
Is daar een oplossing voor?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Een oplossing .... Er is altijd een oplossing, maar de vraag is of je die moeite wel wil nemen. Als je dat wil doen, zal je moeten bijhouden wie er allemaal een overzicht heeft staan, en bij het saven van bepaalde gegevens zal je dan een notificatie moeten sturen zodanig dat alle openstaande overzichten gerefreshed worden. Of, je zal moeten pollen zodanig dat je na x aantal minuten iedere keer je overzicht refreshed.
De vraag is of het de moeite is om dit te doen.

https://fgheysels.github.io/

Pagina: 1