Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Organizacija formi i komponenata za pristup bazama podataka

[es] :: .NET :: Organizacija formi i komponenata za pristup bazama podataka

[ Pregleda: 3203 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

eon

Član broj: 10450
Poruke: 53
80.65.94.*



Profil

icon Organizacija formi i komponenata za pristup bazama podataka03.02.2004. u 16:06 - pre 246 meseci
Zapoceo sam neki database projekat u VC#, a nemam gotovo nikakvog iskustva sa MS razvojnim alatima. Do sada sam koristio C++ Builder, i tu sam imao standardan nacin za organizaciju komponenata za pristup bazi: kreiram data modul, na njega dropam sve komponente (konekcija, tabele, query komponente itd.) , a zatim ukljucim header data modula u sve forme sa kojih zelim pristupati podacima. Tako su mi sve komponente za pristup bazi bile na jednom mjestu i nije bilo dupliciranja.
(Recimo, u C++ Builderu bih imao frmData (Data module) na kome je komponenta tblBlaBla, te formu frmMain. Ako bih iz frmMain htio pristupiti tabeli, to bih uradio tako sto dodam #include "frmdata.h", a zatim pisem frmData->tblBlaBla->...)

Zanima me kakva je strategija za to u Visual Studiu, tj. ima li neki prakticniji nacin od toga da za svaku formu drzim posebno connection, data adapter i dataset? Ako vec mora tako, kako da pristupim podacima sa druge forme?
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka03.02.2004. u 18:59 - pre 246 meseci
Možda ne bi bilo loše da potrebnu funkcionalnost ugradiš u svoje poslovne objekte.
Commercial-Free !!!
 
Odgovor na temu

eon

Član broj: 10450
Poruke: 53
80.65.94.*



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka03.02.2004. u 19:31 - pre 246 meseci
Sta hoces reci?

[Ovu poruku je menjao Dragi Tata dana 03.02.2004. u 13:10 GMT]
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka03.02.2004. u 20:04 - pre 246 meseci
Uh, ovo se zove nesporazum i po.

Elem, ovako kako si ti krenuo, da dodaješ connection, dataset i adapter objekte "na" samu formu - može tako, ali, u principu, trebalo bi razdvojiti GUI od ostalih slojeva koji čine aplikaciju.

Tako možeš da napraviš klasu npr. Kupac (koji bi bio deo Business layer-a) i da u njoj isprogramiraš sve što je potrebno da bi objekt te klase radio sa bazom podataka, vezano za samog sebe. Ili da ta klasa Kupac "radi" povezano sa jednom drugom klasom, KupacDM, koa bi se nalazila u Database management layer-u i bila bi odgovorana za komunikaciju sa bazom.


Commercial-Free !!!
 
Odgovor na temu

eon

Član broj: 10450
Poruke: 53
80.65.94.*



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka03.02.2004. u 20:49 - pre 246 meseci
Ufff, izvini. Mislio sam da sam zvucao kao neki "poslovnjak" koji nema pojma o programiranju, pa da me zato zafrkavas.

Ovo sad kontam, ali vise teoretski. Upravo radi razdvajanja sam i pitao za ovo. Medjutim, navucen sam na Borlandovu lakocu u programiranju. Ima li negdje primjer kompletne Win Forms database aplikacije, koja radi sa vise tabela itd?
 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka04.02.2004. u 18:58 - pre 245 meseci
Ja radim u Vb.netu tako da ne znam tacno da ti kazem kako to radi u C# ali sam siguran da je princip isti. Prilicno je opsirno, ali cu probati da skratim.
Prvo ne moras da za svaku formu pravis novu konekciju. Konekciju na formi dobijes automatski kada napravis prvi DataAdapter (mislim kada vizualno dodas tabelu iz databaze na formu). Svi ostali DataAdapteri koje posle napravis koriste tu istu konekciju. To je zato sto dataadapter da bi se konfigurisao mora da ima konekciju, odnosno cetiri komande DataAdaptera (SELECT, UPDATE, DELETE i INSERT) moraju da imaju konekciju. Ukoliko koristis vise DataAdaptera preporucujem ti da prilikom konfigurisanja svakog DataAdaptera, tim (4)komandama das dobra i tebi prepoznatljiva imena. Nakon toga imas jos opcije "Generate DataSet" i "Preview Data". Sve ovo se desava da bi ti imao bolji (vizuelni) pregled. DataSet jos uvek nije "napunjen". To moras sam da uradis, npr.:

da1.fill( ds, "Ime") gde je Ime ime tabele iz databaze.

Vazno: Isti dataset moze da primi podatke iz vise DataAdaptera.
Ukoliko napravis Module i tamo definises konekciju.Npr.:

Module connection
Private con As SqlClient.SqlConnection = New SqlClient.SqlConnection()
Public Sub cony()
con.ConnectionString = "data source=SAKILI\VSDOTNET;initial catalog=nwind;integrated security=SSPI;persist security info=True;workstation id=SAKILI;packet size=4096"
End Sub
End Module

Konekciju ne moras da otvoris( con.open), barem ne za Sql konekciju, za OleDB nisam siguran, a connectionstring mozes da "ukrades" iz properties automatski napravljene konekcije. Sada na formi pod
#Region " Windows Form Designer generated code "
pronadjes gde je komandama DataAdaptera dodeljena automatska konekcija i sve to lepo izbrises. U Load Event-u na formi prvo pozoves Cony() i onda definises za svaku komandu tvoju konekciju iz modula. Kad ovo uradis, gubis vizuelni pregled DataAdaptera , ali zato u svakoj formi mozes da koristis jednu konekciju.

Sto se tice pristupa iz drugih formi i obrnuto, to ces morati malo sam da proradis , a osim toga vazno je sta tacno hoces. Najbolje je izgleda da napravis property (as datarow) u formi u kojoj se dataset nalazi i napravis binding izmedju property i dataseta. Ovo opet zavisi od toga sta ti tacno treba. Properties ukoliko ih napravis public mozes "lako" da vidis iz druge forme.
Valjda ne moze krace. Nadam se da je ovo barem malo pomoglo.
Pozdrav.
Vuko
 
Odgovor na temu

eon

Član broj: 10450
Poruke: 53
80.65.94.*



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 07:28 - pre 245 meseci
Hmmm... da rezimiram sta sam skontao iz tvog i degojsovog odgovora kao kombinaciju.
Mogao bih jednu konekciju, te potrebni broj data adaptera i dataseta strpati u jednu klasu kao members , a zatim im pristupati iz svih formi?
Skontao sam ovo s pristupom iz drugih formi, treba inicijalizirati pokazivac na formu/klasu, a zatim zeljene datasests, buttons, itd. proglasiti public (kod C++ buildera to nije bilo potrebno zato sto su bili __published ).

Vjerovatno ovo "izlaganje" komponenata nije bas u duhu OOP ali ne vjerujem da bih znao dobro to postaviti tako da se nema direktan pristup konekciji, data adapterima i datasets-ima, a da i dalje mogu koristiti data bindings i slicne cake na windows formama.
 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 17:01 - pre 245 meseci
Ma, ovo u vezi konekcija je prica za sebe. Ja, bas kao i svi drugi koje poznajem, nisam bio impresioniran idejom da mi se konekcije tako "sirokogrudno" otvaraju na svakoj formi. Zato sva ta prica juce. Ljudi iz Microsoft-a tvrde da skroz dok su "connectionstrings" isti, da se sve konekcije ponasaju kao jedna, bez obzira koliko ih ima. Konekcija se po potrebi otvara i zatvara automatski (juce sam napomenuo da konekcija ne mora da se otvara u modulu). E sad jel' se to oni opravdavaju ili brane koncepciju, ne bih znao da kazem. Ja i dalje "ne volem" kad mi se konekcije same generisu.
Dugi deo pitanja sam namerno onako "zamutio" s nadom da ce jos neko da se primi i nesto napise. Medjutim, posto nema reakcije, moracu ipak ja, kad sam vec zapoceo. Ideja da sve strpas u jednu klasu nije prirodna. Treba da razvijas program prirodno i normalno i da imas na umu sledecu koncepciju:
- Startup forma je "gazda", ima svoja pravila i ne priznaje kompromise.
- U principu, forma s kojom je program zapocet bi trebala da bude forma s kojom se program zavrsava (pazi, princip, ne i pravilo)
- startup forma ima potupuni pristup do svih properties, methods i public varijabli svih formi koje se instancirane iz nje sto ne vredi obrnuto. Mislim instancirane forme nemaju pristup do properties, methods i public varijabli startup forme.
Ovo je dosta za sada.
E sad kako onda covek da promeni npr. neku varijablu u startup formi iz instancirane forme kad instancirana forma nema pristup do varijabli u startup formi?
Lepo. Instanciras formu modalno, prosledis joj varijablu iz glavne forme, promenis je u instanciranoj formi i onda kada zatvoris instanciranu formu (zatvoris je vizuelno, ali ona jos uvek postoji u memoriji glavne forme), izcitas u glavnoj formi promenjenu varijablu i tek onda zatvorenu instanciranu formu proglasis nothing. Dakle razmena podataka instancirane forme sa glavnom(startup) formom ima smisla jedino ako je instancirana forma otvorena modalno ( u vb.net-u je to form.showdialog() ). Ovo je bas ono prosto objasnjeno. Dalje u kombinaciji custom properties i databinidinga mogu "cuda" da se naprave.
Probaj opet da rezimiras, pa cemo da vidimo sta dalje :)
Vuko
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 17:09 - pre 245 meseci
Ako se ne varam, ADO.NET koristi connection pooling.. pogledaj malo na Google kako i šta tačno: konekcija svakako ostaje na "živi" malo duže.
Commercial-Free !!!
 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 18:23 - pre 245 meseci
Tacno to se zove connection pooling. Doslovce moja biblija kaze:
Kada se otvori prva konekcija, sve informacije se smestaju u connection "pool" i koristi ponovo za sledecu konekciju znacajno pobljsavajuci perfomance. Kreiranje "pool"-a se zasniva na "connection string"-u. Ukoliko se pojavi konekcija sa novim "connection string"-om pravi se novi pool. (eh kad bih jos znao sve ovo da kazem na dobrom srpskom :))))))))
Izvinjavam se sto sam bio neprecizan. Dakle, imam amandman:
"Koristenje istog connection stringa znacajno pobljsava performance."
Tako da pravljenje valastite konekcije u modulu i koristenje iste na nacin kako sam to objasnio juce ima jos vise smisla.
Jedino mi jos nije jasno da li se pod "pool" podrazumeva "prognoziranje" ili nesto drugo posto ne vidim nikakve veze ni sa bazenom, niti sa bilijarom. A i ja bi bas sve da znam.
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 19:50 - pre 245 meseci
Bazen, u kom se nalazi n gotovih objekata.

Pogledaj tekst o .NET i object pooling: Everyone Into the Pool

Pozdrav
Commercial-Free !!!
 
Odgovor na temu

eon

Član broj: 10450
Poruke: 53
*.as54.bi.bih.net.ba.



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 19:54 - pre 245 meseci
Ok, nisam mislio da obavezno mora biti u jednoj klasi, moze konekcija biti zasebna, a i datasets i dataadapters zasebne klase (spomenuo sam stavljanje svega u jednu klasu, zato sto mi je tako lakse, ili zato sto vise lici na Borland :) ). Nekako mi je nelogicno da DataSet bude dio forme.
Razdvajanje data adaptera i dataseta od formi mi olaksava pristup u slucajevima kada zelim da mi vise formi (instanciranih) pristupa istom datasetu. U biti mi nije najjasnije kako bih to izveo sa ovim proslijedjivanjem varijabli. Takodje, trpanje tog u zasebnu(e) klasu(e) mi, koliko kontam, olaksava u slucaju da zelim raditi Web Forms aplikaciju na istom kodu, jer tada mogu koristiti iste klase. Ono sto otezava stvar, a sto sam se danas uvjerio jeste sto treba vise kodiranja, jer ne mogu vizuelno dodati ove komponente. Doduse, i to je pitanje, jer je cini mi se lakse odrzavati i mijenjati kod nego one silne slicice i ikonice. :)

Ovo je ok sto kazes za dugmice i ostale stvarcice, jer nisam znao da startup forma ima pristup svim podacima instanciranih formi, tako da to olaksava stvar. U vecini slucajeva nece ni trebati pristup pojedinih formi dijelovima druge, ali ako bi to bio dataset onda vjerovatno hoce. Barem takvo iskustvo sam imao sa C++ Builderom. Npr. na jednoj formi prikazujem/editujem podatke o partnerima i cupam ih iz jedne TTable komponente (koja je unutar Data Modula), ali na drugoj formi punim combo box imenima partnera koja vadim iz iste TTable komponente .

Ako ti nije problem da mi das primjer koda, recimo da zelim promijeniti ili samo ocitati Text svojstvo Button-a koji se nalazi na startup formi, iz instancirane forme, ali da Button ne cinim public. Isto tako, da iz jedne instancirane forme uradim istu stvar na drugoj instanciranoj formi.


Mogu li se forme proglasiti friend-sima ili tako nekako, pa da se strozije kontrolise pristup pojedinim dijelovima forme(klase)?




Ufff...navika je jedna muka a odvika dvije. Izvinite ako sam naporan.

 
Odgovor na temu

Vuko_
Amsterdam

Član broj: 19660
Poruke: 35
*.adsl.xs4all.nl



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 22:26 - pre 245 meseci
Ja nazalost nikada nisam programirao u C++ a i preslabo poznajem kompjutersku terminologiju naseg jezika, tako da neke stvari koje si napisao ne razumem bas najbolje. U svakom slucaju mogu da ti dam primer ( i to u Vb.net-u) kako da razmenis podatke sa instanciranom formom i promenjenu vrednost vratis nazad u glavnu formu. Pretpostavka je da imas frmStartUp sa dugmicem btnOK i frmInstance sa textboxom txtPromeni i dugmicem btnPromeni.

Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
Dim fi As frmInstance = New frmInstance()
'Ovo je u principu trenutak kada treba da prosledis podatke instanciranoj formi
fi.txtPromeni.Text = btnOK.Text
fi.ShowDialog()
'Kada zatvoris instanciranu formu program nastavlja ovde dalje
'tako da ovde citas promene za koje si zainteresovan
btnOK.Text = fi.txtPromeni.Text
'brises fi iz memorije
fi = Nothing
End Sub

U instanciranoj formi pod btnPromeni_Click stavis samo me.close, a moze i bez tog dugmica, jednostavno promenis text u textbox-u i zatvoris instanciranu formu.

Princip za dve instancirane forme je slican. Prvo pokupis podatak u startup formi iz instancirane forme broj1 i prosledis ga iz startup forme u instanciranu formu broj 2, s tom razlikom sto instancirana forma broj 2 ne mora da bude modal. Citavo ovo vreme sam pretpostavljao da znas sta je to modal.

Da si naporan nebi niko pricao s tobom :)
 
Odgovor na temu

degojs

Član broj: 4716
Poruke: 5096



+51 Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka05.02.2004. u 23:29 - pre 245 meseci
Evo ti jedan drugi način. Negde u Form1 imaš kod:

..
Form2 f2 = new Form2(this);
f2.ShowModal();
..

Dakle, kao što vidiš konstruktoru Form2 prosleđujemo referencu na Form1, tj. this.

E sad treba da napišeš dodatni konstruktor u Form2 koji prima referencu tipa Form1 i onda je dalje nadam se lako. Potrebno je naravno da određena svojstva, metode i kontrole u Form1 budu ili public ili internal (što je ekvivalent za Friend ako se ne varam) da bi ih mogao čitati iz Form2.

Dakle, da sumiramo..
Form1 je startup forma i možeš da dodaš jedan button i jedan textbox a zatim promeni private u internal, ovako:
Code:

public class Form1 : System.Windows.Forms.Form
{
    internal System.Windows.Forms.TextBox textBox1;
    internal System.Windows.Forms.Button button1;
...


Klikom na dugme u toj Form1 će se izvršiti:
Code:

private void button1_Click(object sender, System.EventArgs e)
{
    Form2 f2 = new Form2(this);
    f2.ShowDialog();
}


E sad u Form2 dodaj konstruktor:
Code:

public Form2( Form1 f1 )
{
    System.Windows.Forms.MessageBox.Show( f1.textBox1.Text );
}

i to je to. Dakle, trik je da potrebna svojstva, metode, kontrole, članove podatke, itd., učiniš vidljivim (private menjamo u internal ili ako baš mora u public) i da nekako proslediš u Form2 referencu na Form1..

Pozdrav :)


Commercial-Free !!!
 
Odgovor na temu

eon

Član broj: 10450
Poruke: 53
*.as54.bi.bih.net.ba.



Profil

icon Re: Organizacija formi i komponenata za pristup bazama podataka06.02.2004. u 05:17 - pre 245 meseci
Sad mi je mnogo jasnije.

Upravo sam citao i sta radi internal:

The internal modifier can also be used on a member, which then allows that member to be
accessible from classes in the same assembly as itself, but not from classes outside the assembly.
This is especially useful when several public classes need to cooperate, but some of the shared
members shouldn’t be exposed to the general public. Consider the following example:



Hvala vam obojici, puno ste mi pomogli, a i moderatoru koji vrijedno sprjecava da dodje do svadje.
Vjerovatno cu uskoro doci sa novim pitanjima. :)
 
Odgovor na temu

[es] :: .NET :: Organizacija formi i komponenata za pristup bazama podataka

[ Pregleda: 3203 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.