[ Shadowed @ 28.08.2004. 22:34 ] @
Gde god se opisuje rad sa ADO.NET-om pominje se da je DataSet kopija baze u memoriji.
Ako je vec tako, kako mogu da postavljam SQL upite za podatke koji su u DataSet-u?
Ono sto ja hocu zapravo da uradim je da ne koristim SQL server ili Access bazu vec da podatke cuvam u XML fajlu. Njih mogu direktno da ucitam u DataSet i ostaje mi samo da onda radim sa njima.
Mogu uz pomoc DataView-a da vrsim SELECT upite ali trebaju mi i ostali.
[ esnaf @ 29.08.2004. 08:42 ] @
Probaj nesto ovako:
Popunis DataSet

Code:

DataSet ds;
DataRow [] dr;
dr=ds.Tables(0).Select("Date > 1/1/00",CompanyName DESC) ; //npr.
//U zavisnosti koju tabelu hoces da filtriras u DataSet-u.

[ Shadowed @ 29.08.2004. 23:54 ] @
Mozda bi bilo bolje da postavim sire pitanje. Kako da koristim .xml fajl umesto baze podataka?
[ Dragi Tata @ 30.08.2004. 00:47 ] @
Nikako. XML je markup jezik, a ne DBMS. Ne znam otkud ti ideja da koristiš XML umesto baze podataka.
[ Shadowed @ 30.08.2004. 00:58 ] @
Otud sto DataSet moze da cuva podatke (tabele) u .xml fajlu i da ih kasnije cita iz njega.
[ degojs @ 30.08.2004. 01:16 ] @
Poenta Tate je jednostavna: koristi bazu, tome je i namenjena i bolje je rešenje za te stvari, a to što XML može da posluži nije dovoljan razlog za davanje prednosti istom.
[ Shadowed @ 30.08.2004. 09:52 ] @
Ma, meni je za aplikaciju koju radim prilicno sve jedno da li ce fajl biti .mdb ili .xml. Stvar je u tome sto se ranije nisam mnogo bavio ADO.NET-om pa ga sad ucim a posto ne ucim samo da bih napravio neki program vec i zato sto me,jednostavno, interesuje pitao sam kako bi moglo ovo da se uradi. Sve jedno primenio ja to ili ne interesuje me kako bi moglo da se uradi.

Osim toga, meni bi bas i trebali upiti pa sam zato na pocetku i postavio takvo pitanje. Nekako mi se DataSet cinio odlicnim za to, ali ne uspevam da skontam kako da postavljam INSERT, DELETE, ... upite. Znam da mogu da brisem, menjam... pojedinacne redove u tabeli ali kao sto rekoh, hteo bih da vrsim te upite.
Mozda na kraju preskocim DataSet i sve radim direktno na bazi.
[ ZokiR @ 01.09.2004. 02:58 ] @
Citat:
Shadowed: Ma, meni je za aplikaciju koju radim prilicno sve jedno da li ce fajl biti .mdb ili .xml.
...
Osim toga, meni bi bas i trebali upiti

Ova dva navoda su ti protivrečna—ako su ti upiti potrebni, onda svakako treba da koristiš bazu. DataSet nije zamena za bazu, nego struktura za privremeno držanje podataka iz baze, tj. onog dela podataka koji su ti trenutno neophodni (a ne kopiju svih podataka iz baze). Takođe, DataSet možeš da napuniš korišćenjem upita.
[ Shadowed @ 01.09.2004. 10:31 ] @
Stvar je u tome sto sam u bar tri knjige video tekst gde se kaze da DataSet predstavlja kopiju dela ili cele baze u memoriji. Sto mi je izgledalo logicno jer onda mozes joj da pristupas offline i bez obracanja paznje na to kakav je stvarni izvor podataka. Zbog toga mi je izgledalo logicno da mogu sa DataSet-om da postupam kao sa bazom (da postavljam upite).
[ boomLM @ 26.08.2006. 18:23 ] @
Uf, da li postoji neki način da se upiti izvode NAD DATASET-om.Data set je napunjen sa 4 tabele iz baze (SELECT* FROM ...) kako da izvršim upit,ako je to uopšte moguće kako ne bih ponovo učitavao iz baze podatke.Da ne ispitujem pojedinačno rowove pa ako postoji da nešto uzmem(prikažem u gridu,a nešto ne ili ...).Ovo pitam jer za SQL upit nad više tabela (ne upit u samoj bazi pa iščitavanje u aplikaciji)-dataadapter neće da generiše ni select izjavu!
[ DarkMan @ 26.08.2006. 19:31 ] @
Citat:
Shadowed: Stvar je u tome sto sam u bar tri knjige video tekst gde se kaze da DataSet predstavlja kopiju dela ili cele baze u memoriji. Sto mi je izgledalo logicno jer onda mozes joj da pristupas offline i bez obracanja paznje na to kakav je stvarni izvor podataka. Zbog toga mi je izgledalo logicno da mogu sa DataSet-om da postupam kao sa bazom (da postavljam upite).


Ako zelis da izbegnes instalaciju servera za bazu podataka mogao bi probati koristiti baze kao sto je sqlite www.sqlite.org (baza koja se sastoji od jednog dll-a i par fajlova sa tvojim podacima).
Vidim da na netu postoje vec neke klase za koriscenje sqlite-a.

Najbolje bi bilo kada bi neko napisao nesto slicno HSQLDB-u (baza podataka napisana u cistoj javi) za .NET (ili mozda vec postoji, ne znam)
http://hsqldb.org/

Edit: Sada sam pogledao i izgleda da vec postoji C# verzija HSQLDB. http://www.c-sharpcorner.com/database/SharpHSQL.asp

[Ovu poruku je menjao DarkMan dana 26.08.2006. u 21:11 GMT+1]
[ logic_rabbit @ 27.08.2006. 10:17 ] @
Mislim da dataset mozes napuniti sa beskonacno datatable objekata i onda se obracas svakom datatable objektu posebno sa sql upitom.
[ maksvel @ 27.08.2006. 12:35 ] @
Ako aplikacija nije mnogo zahtevna, onda može i bez baze... A u zavisnosti od toga šta treba da se radi sa podacima, bira se između DataSet-a i datareader-a. Za brz pristup, bez keširanja, DataReader završava posao...
[ bjevta @ 27.08.2006. 13:17 ] @
Upravo razvijam jednu aplikaciju čija bi arhitektura mogla da bude zanimljiva. Ništa originalno, ali funkcionalno.

Imam Web Service preko koga "dovučem" podatke kao DataSet u XML formatu. Korisnik uspostavi Interent konekciju, Desktop aplikacija se obrati Web Servisu i on joj isporuči DataSet. Onda snimim taj DataSet u Isolated Storage i omogućim korisniku da ga off-line edituje. DataTable klasa ima metode za dodavanje, brisanje i update vrsta. Kad završi s unosom podataka, korisnik ponovo uspostavlja Internet konekciju, uploaduje podatke preko Web Servisa koji taj DataSet snima u bazu.

Za filtriranje vrsta na raspolaganju su DataTable.Select funkcija i iteracija kroz pojedinačne tabele. Dakle, pišemo kod tipa

MyTable resultSet;
for each row in SourceTable
if uslov
copy row from SourceTable to ResultSet


DataTable.Select metod ima samo rudimentarne mogućnosti filtriranja. Stoga moramo da pišemo kod. Ništa strašno, to očas postane rutina.

---------

XML perzistencija je moguća. VisualStudio ima komponentu XmlDataSource da olakša manipulisanje XML fajlovima.

---------

Ako je single user aplikacija, DataSet je, u kombinaciji sa file sistemom, najjeftiniji i najjednostavniji način za perzistenciju.

[ Shadowed @ 29.08.2006. 02:11 ] @
Meni je to tada (obratiti paznju na datum) trebalo bas sa .xml fajlom. Medjutim, sada mi nije to narocito bitno (ne secam se ni sta sam radio to...) tako da perdlazem da se usredsredite na pomoc kurisniku boomLM. Naravno, svaka dodatna informacija je dobrodosla.
[ Prokleta_Nedelja @ 01.09.2006. 09:43 ] @
Samo da nesto dodam,

Nelogicno i nerealno je planirati da se koristi SQL upit (INSERT, SELECT i ostali) a da se izuzme Bilo koja SQL BAZA!!!!!
[ VerbatimBOT @ 01.09.2006. 09:56 ] @
Ne vidim zašto bi bilo kad je sql jezik postojao još mnogo ranije pre SQL baza (ako podrazumevaš pod ovim Microsoft SQL Server).
Ja recimo, vidim veliku primenu sql upita nad datasetom jer sam po sebi dataset može biti lokalna kopija baze u memoriji računara.
[ DarkMan @ 01.09.2006. 11:36 ] @
Cini mi se da je neko vec napisao ali da se ponovi.
SQL upit ne moze da se vrsi nad DataSetom jer je to samo container za podatke.
Iza njega ne postoji nikakav engine koji bi prihvatio upit, analizirao ga, kompajlirao i izvrsio.
Da je moguce onda bi .NET framework u sebi imao mali SQL server za tako nesto (ali ga nema).
Jedino sto DataSet moze je da filtrira podatke za prikaz i da se podaci programski menjaju.
[ mmix @ 01.09.2006. 12:07 ] @
Citat:
VerbatimBOT: Ne vidim zašto bi bilo kad je sql jezik postojao još mnogo ranije pre SQL baza (ako podrazumevaš pod ovim Microsoft SQL Server).
Ja recimo, vidim veliku primenu sql upita nad datasetom jer sam po sebi dataset može biti lokalna kopija baze u memoriji računara.


OK, prva stvar koju naucis na bilo kom od MCDBA kurseva je da SQL server nije monolitan vec da ima dve velike komponente, relational engine i storage engine. Dataset sam po sebi je iskljucivo storage engine (da, mozes da smestas relacije u dataset, ali one se zapravo implementiraju u nasledjenoj klasi koja nastaje u pozadini.
Dataset trpi jedino upit nad jednom tabelom gde se vracaju sva polja i gde ti mozes samo da navedes WHERE klauzulu (efektivno filtrirajuci tabelu). Nikakvi joini, nikakva selekcija polja, nikakava agregacija, sve je to funkcionalnost relational engine-a koji nemas u .NETu.

[ VerbatimBOT @ 01.09.2006. 12:26 ] @
Dobro bre mojne me ličujete, povlačim reč!
Nemam običaj da radim sa dataSet-ovima, tako da ih samo teoretski poznajem (ni tu toliko dobro, što se vidi iz priloženog).
Očigledno sam imao pogrešno mišljenje za dataSet.
Ua dataSet!
[ mmix @ 01.09.2006. 15:00 ] @
Citat:
VerbatimBOT:Ua dataSet!


Haha, samo opusteno i bez panike . Dataset ima svoje mnogobrojne prednosti i daleko od toga da je beskorisan samo zato sto nema query processor. Cuva podatke, osigurava referential integrity, radi indeksiranje po primarnom kljucu i ima neke rudimentarne relational funkcionalnosti bazirane na filtriranju (tipa vrati sve child redove nekog parent reda), a pored svega toga ima ugradjeni DiffGram i prati promene na podacima; sto se mene tice to me sve oslobadja gomile validacionih procesa koje sam ranije morao rucno da kodiram. Ko zna, mozda ce (ako vec nije) neko napraviti query processor za .net koji ce koristiti dataset kao storage, nikad se ne zna...