Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 2.358 pregleda

Najnovija ↓

.NET, koncept rada sa bazama 02.01.2009. u 12:22 · pre 217 meseci #1
"Ceo zivot" ozbiljne aplikacije radim u Delphi-ju. Sada treba da radim jedan projekat u C# na .NET.

Dosta mi je tesko da svarim .NET logiku rada sa bazama. Mislim, nisam glup, razumem sta je nekonektovan i konektovan rezim, ali meni treba da napravim apliakciju koja radi na klasican nacin sa "zivim" (konkurentnim pristupom bazi sa vise radnih stanica u lokalnoj mrezi.

Nikako ne mogu da uklavirim kako se to radi. Moze li neko da mi u kracim crtama rasvetli stvar?

Dakle, zahtev je prilicno jednostavan: na tri racunara u mrezi treba da se vrti isti program povezan na jednu bazu, i kada neko na jednom racunaru unese neki podatak ta izmena treba da se odmah vidi na drugim racunarima i obrnuto.

Takodje, posto se radi o nekim tabelama koje imaju ogroman broj podataka, ne zelim da se svi podaci prebace na klijenta pa da on tada sa njima barata, vec da klijent uzme sa servera samo onoliko podataka koliko mu je potrebno da ih prikaze (recimo u gridu) a ako korisnik skroluje grid da po potrebi ucitava ostale slogove.

Nekim tabelema je primarni kljuc autoincrement i treba da, kada neko unese novi slog, taj slog dobije kljuc u skladu sa onim sto se unosi i na drugim racunarima, a ne neki interni.
Potpis
http://pedja.supurovic.net - http://wireless.uzice.net - Besplatni .RS domeni - Mikrotik uputstva - YT9TP - OpenStreetMap Srbija
Re: .NET, koncept rada sa bazama 02.01.2009. u 14:01 · pre 217 meseci #2
Ne brini, nisi poludeo, jednostavno to ne moze :) Sa prelaskom iz ADO u ADO.NET ukinut je dinacki client pesimistic kurzor. Microsoft je zakljucio da ti, ja, pera, zika i mika nemamo pojma o programiranju i ukinuo nam je mehanizam kojim smo mogli da kocimo bazu :) Sto je najgore u pravu su, lose odradjeni dinamicki kurzori su glavna prepreka skaliranju aplikacije kako vertikalno tako i horizontalno i uzrocnik mnogih deadlock situacija. Mene je to uzasno nerviralo u pocetku ali se brzo naviknes, a za ono malo situacija gde mi je trebao pesimistic locking koristio sam stored procedure.

Citat:
Dakle, zahtev je prilicno jednostavan: na tri racunara u mrezi treba da se vrti isti program povezan na jednu bazu, i kada neko na jednom racunaru unese neki podatak ta izmena treba da se odmah vidi na drugim racunarima i obrnuto.

Generalno ne postoji efikasan nacin da emuliras dinamicki kurzor u .NETu, jedini nacin je da periodicno ucitavas nove/promenjene podatke koristeci timestamp kolonu i mergujes sa radnim dataset-om ako je npr MAX(timestampcol)>tvogmaxucitanog, glavno pitanje medjutim je koliko ti je automatski reload vazan? Sve .NET komponente se uglavnom baziraju na tome da rade sa offline podacima na koje su bindovani i samim tim su veoma 'liberalne' u svom pristupu podacima, tj nista ne kesiraju vec uvek vuku podatke iz izvora, sto bi za dinamicke kurzore znacilo drastican pad performansi i jos gori locking nightmare.
Izuzev povratka na ADO nema nacina da ovo odradis automatski i osudjen si na disconected optimistic concurrency.

Citat:
Takodje, posto se radi o nekim tabelama koje imaju ogroman broj podataka, ne zelim da se svi podaci prebace na klijenta pa da on tada sa njima barata, vec da klijent uzme sa servera samo onoliko podataka koliko mu je potrebno da ih prikaze (recimo u gridu) a ako korisnik skroluje grid da po potrebi ucitava ostale slogove.

Ovo mozes da izvedes i kroz dodatne select komande u dataadapteru, a ako koristis Linq to SQL vec imas podrsku za to kroz Skip() i Take() metode koje rade savrseno. Poenta je da imas formiran SELECT koji parametrizovano ucitava podatke od do nekog kriterijuma, mada je implementacija ovoga u gridu iskreno mucenje. Ja npr za te svrhe koristim 3rd party 'huge dataset' proizvode, narodski poznatije kao 'virtual mode datasets'. Kosta nesto para ali radi posao npr koristio sam ga za prozor u tabelu sa nesto malo jace od 1.8mil redova i radilo je ultra brzo i ucitavalo samo one podatke koji se prikazuju i sve je izgledao "dinamicki" iako je u pozadini dataset odradjivao on-demand offline ucitavanje.

Citat:
Nekim tabelema je primarni kljuc autoincrement i treba da, kada neko unese novi slog, taj slog dobije kljuc u skladu sa onim sto se unosi i na drugim racunarima, a ne neki interni.

Linq to SQL i EF to resavaju automatski u pozadini, na DataSet-u se to resava tako ste se na ID polju postavi seed i increment na -1, tako da ce novi redovi u DS-u dobijati kljuceve -1, -2, itd i nece se klati sa realnim kljucevima iz tabele, a kad se uradi insert adapter ce ignorisati ID polje i posle inserta ce ucitati novokreirani red koji ima novi realni ID.
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: .NET, koncept rada sa bazama 03.01.2009. u 12:04 · pre 217 meseci #3
Citat:
Predrag Supurovic:Dakle, zahtev je prilicno jednostavan: na tri racunara u mrezi treba da se vrti isti program povezan na jednu bazu, i kada neko na jednom racunaru unese neki podatak ta izmena treba da se odmah vidi na drugim racunarima i obrnuto.

Takodje, posto se radi o nekim tabelama koje imaju ogroman broj podataka, ne zelim da se svi podaci prebace na klijenta pa da on tada sa njima barata, vec da klijent uzme sa servera samo onoliko podataka koliko mu je potrebno da ih prikaze (recimo u gridu) a ako korisnik skroluje grid da po potrebi ucitava ostale slogove.

Nekim tabelema je primarni kljuc autoincrement i treba da, kada neko unese novi slog, taj slog dobije kljuc u skladu sa onim sto se unosi i na drugim racunarima, a ne neki interni.


Došlo doba da se .NET proba. ;)

Od izlaska SQL Servera 2005 na raspolaganju imaš: "query notification" gdje klijent biva obaviješten kada nastane kritična promjena podataka u bazi na serveru. Dakle - klijent učita određeni dio podatka u keš, prikazuje podatke na ekranu i ne zahtijeva učitavanje novih podataka u keš dok se nije desila promjena u bazi (bez obzira odakle ona došla).

Ovo je zgodno za, recimo, aplikacije koje barataju podacima sa berze u "realnom vremenu".

Imaš primjer za implementaciju na: http://www.simple-talk.com/sql...g-sql-2005-query-notification/

Kroz SQL Server Notification Servis možeš, takođe, biti obaviješten i kada (recimo): cijena proizvoda X premaši Y i sl. Baci oko na: http://technet.microsoft.com/en-us/library/aa226909(SQL.80).aspx

Što se tiče drugog dijela pitanja - već imaš podršku za to. Iz baze se u grid učita minimalno neophodan dio podataka da bi se grid ispunio, i kako se pomjeraš kroz grid - iz baze se dinamički učitava ono što treba da se prikaže na ekranu. Wizard će te sam dovesti do ove tačke kroz LINQ to SQL -> GridControl.

Ako imaš zaista ogroman broj podataka kojim barataš u gridu, i ako korisnik treba da vrši filtriranje/sortiranje/uređivanje podataka kroz grid - onda razmisli o kontrolama tipa Devexpress xtra Grid koje su optimizovane za "Server Mode" režim (primjer: http://tv.devexpress.com/XtraGridLinqServerMode02.movie ).
Re: .NET, koncept rada sa bazama 04.01.2009. u 21:15 · pre 216 meseci
izmenjeno 1 put, poslednji put perun85 05.01.2009. u 18:31
  1. perun8505.01.2009. u 18:31zapis iz teksta poruke
#4
Moje pitanje je vezano za autoincrement ID polje u tabeli.

Za cuvanje podataka u aplikaciji koristim strongly typed DataSet u kome imam dve tabele Racun i Stavke. Ove tabele su povezane preko kolone idRacuna. Pri snimanju podataka u DataSet dolazi do problema. Posto se podaci ne snimaju odmah u bazu, ne znam kako da referenciram odredjenu stavku na odredjeni red u tabeli racun. Ukoliko bi se taj racun stampao, ne bi bio poznat ni njegov redni broj u bazi u datom trenutku, sto naravno predstavlja problem. Kojim mehanizmom se resavaju slicni problemi u .NETu?
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme