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

Kako najbrže napuniti Access bazu?

[es] :: .NET :: Kako najbrže napuniti Access bazu?

[ Pregleda: 2741 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

The Ja
Bijeljina

Član broj: 32249
Poruke: 45
*.com.



Profil

icon Kako najbrže napuniti Access bazu?02.12.2004. u 14:23 - pre 236 meseci
Treba da u Access bazu unesem mnoooogo podataka u jednu tabelu, koja je indeksirana po dva txt polja (Oko 200 txtfajova u CSV formatu, svako oko 2Mb, sa po 15000 zapisa).
To trenutno radim preko ExecuteNonQuery, ali mi je to mnogo sporo (oko 40s po fajlu).

Da li postoji neki drugi način, npr. da napravim DataSet u memoriji, pa da ga na kraju Update-ujem, ili slično.

Napominjem da podatke neću puniti odjednom, već više puta, pa me interesuje da li mogu da napravim prazan DataSet (napominjem da do sad nisam baš puno radio s DataSet-ovima u C#-u)

Hvala.
 
Odgovor na temu

spartak

Član broj: 5625
Poruke: 631
*.yubc.net.



+3 Profil

icon Re: Kako najbrže napuniti Access bazu?03.12.2004. u 07:45 - pre 236 meseci
Ako sam dobro razumeo ti neces raditi neko kreiranje i inicijalizaciju nove baze sa tim podacima ili neku migraciju, vec ces cesto prepumpavati toliko zapisa tamo-ovamo?

Mozemo li da znamo zasto to raidis, koja je svrha toga pa da ti mozda preporucimo nesto brze i efikasnije.
 
Odgovor na temu

The Ja
Bijeljina

Član broj: 32249
Poruke: 45
*.com.



Profil

icon Re: Kako najbrže napuniti Access bazu?03.12.2004. u 10:42 - pre 236 meseci
Citat:
spartak: Ako sam dobro razumeo ti neces raditi neko kreiranje i inicijalizaciju nove baze sa tim podacima ili neku migraciju, vec ces cesto prepumpavati toliko zapisa tamo-ovamo?

Dobro si razumeo, tj. neću ih prepumpavati tamo-ovamo, već samo tamo.
Citat:
spartak: Mozemo li da znamo zasto to raidis, koja je svrha toga pa da ti mozda preporucimo nesto brze i efikasnije.

Radim u Telekomu RS na AXE centrali, pa pravim neku aplikaciju za kontrolu listinga.
(Na žalost radim je besplatno, tj. da sebi olakšam neke druge poslove.)
Na centrali se bilježe svi pozivi, i dnevno se kreira oko 10 txt fajlova, koje prebacujem u bazu, i kasnije ih koristim iz drugog programa.

U principu SQL server bi mi možda ubrzao posao, ali mi opcija s Access-om trenutno radi posao, ali konvertovanje dugo traje.
S DaoRecordSet-om u VC++ to radi 3-4 puta brže, ali polako učim C#, pa bih želio da to uradim u njemu.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako najbrže napuniti Access bazu?03.12.2004. u 15:16 - pre 236 meseci
Ne moras da koristis SQL bazu, dovoljno da imas SQL instaliran. Onda iz njega napravis DTS paket koji ce ti source text file importovati u Access bazu. Za sve ovo ti ne treba linija koda. To je sto se tice najlakse i verovatno najbrze opcije.

Medjutim, ako bas hoces da se igras sa C#-om, odgovor lezi u DataAdapteru. Mozes da koristis OdbcDataAdapter koji ide preko ODBCa, ili (preporucujem) preko OldDbDataAdapter-a, koji je brzi i napredniji (posto je OleDB bolji od ODBCa). A pre svega, potreban ti je DataSet koji ces puniti podacima iz koda.

Najlaksi nacin da napravis sve sto ti treba je da kao prvo napravis konekciju sa Access bazom u "Server Explorer" toolboxu koristeci Jet OLEDB provider
Dalje, iz Server explorera prebaci tabelu na Form, to ce ti na formi krerati konekciju i OleDbDataAdapter sa svim odgovarajucim komandama (select/insert/update/delete).
Desno dugme misa na DataAdapter na formi i izaberi "Generate dataset"; iz wizarda izaberi New, daj mu neko ime, iz liste tabela izaberi svoju (verovatno ce biti samo jedna ako nemas druge adaptere na formi) i cekiraj "Add this dataset to the designer". To ce ti u projekat dodati .xsd fajl sa semom koja odgovara semi tabele u bazi, a na formu dodati instancu tog dataseta

U kodu forme jednostavno punis dataset do mile volje i kad zavrsis sa svim unosima i hoces da prebacis dataset u bazu, samo pozovi Update metod DataAdaptera i kao parametar prosledi instancu DataSet-a.



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ć
 
Odgovor na temu

spartak

Član broj: 5625
Poruke: 631
*.yubc.net.



+3 Profil

icon Re: Kako najbrže napuniti Access bazu?03.12.2004. u 15:24 - pre 236 meseci
Evo kako ja za sada razumem ono sto ti radis:

txt CSV -1-> Access -2-> sad koristis te podatke drugom aplikacijom

Dopunsko pitanje za korak 1 glasi: "Da li odradjujes bilo kakvu poslovnu logiku pri punjenju Access baze, to jest da li transformises u prvom koraku podatke na bilo koji nacin?"

U slucaju da je odgovor ne, licno ne vidim razlog da prepumpavas podatke .NET aplikacijom. Zasto direktno ne importujes file u Access sa GetExternalData?
 
Odgovor na temu

The Ja
Bijeljina

Član broj: 32249
Poruke: 45
*.teol.net.



Profil

icon Re: Kako najbrže napuniti Access bazu?03.12.2004. u 15:46 - pre 236 meseci
Citat:
spartak: Evo kako ja za sada razumem ono sto ti radis:

txt CSV -1-> Access -2-> sad koristis te podatke drugom aplikacijom

Dopunsko pitanje za korak 1 glasi: "Da li odradjujes bilo kakvu poslovnu logiku pri punjenju Access baze, to jest da li transformises u prvom koraku podatke na bilo koji nacin?"

U slucaju da je odgovor ne, licno ne vidim razlog da prepumpavas podatke .NET aplikacijom. Zasto direktno ne importujes file u Access sa GetExternalData?


Za sad se to slaže s onim što sam napisao, ali ranije nisam naveo da tekst koji daje centrala nije CSV, već su podaci fiksne dužine, bez separatora, i što je još gore s vremena na vreme se ubacuju neki karakteri koji kvare strukturu zapisa. Tako da sam već napravio program koji od tog txt fajla generiše CSV, i u njega ubacuje neke dodatne informacije kojih nema u originalnom fajlu (naziv mesta koje je pozvano, tarifnu klasu, ...).

CSV sam naveo jer mi nije potreban način na koji ću izvući podatke iz originalnog fajla, već način na koji da ubrzam čitav proces, a u konačnoj verziji se uopšte neće ni pojavljivati, ali sad se CSV kreira za oko 2.5s, a podaci prebacuju u bazu (uz isti kod) za oko 40s (a u VC++ za oko 5s - u praznu bazu, uz MFC kod).

GetExternalData mi ne radi posao, jer je fajlove potrebno obrađivati bar jednom dnevno, što često neću raditi ja već neko od tehničara, a za to je mnogo lakše i elegantnije rešenje da kliknu na digme, i izaberu mesec i godinu na koje se odnose podaci.

Citat:
mmix: Ne moras da koristis SQL bazu, dovoljno da imas SQL instaliran. Onda iz njega napravis DTS paket koji ce ti source text file importovati u Access bazu. Za sve ovo ti ne treba linija koda. To je sto se tice najlakse i verovatno najbrze opcije. :)

Medjutim, ako bas hoces da se igras sa C#-om, odgovor lezi u DataAdapteru. Mozes da koristis OdbcDataAdapter koji ide preko ODBCa, ili (preporucujem) preko OldDbDataAdapter-a, koji je brzi i napredniji (posto je OleDB bolji od ODBCa). A pre svega, potreban ti je DataSet koji ces puniti podacima iz koda.

Najlaksi nacin da napravis sve sto ti treba je da kao prvo napravis konekciju sa Access bazom u "Server Explorer" toolboxu koristeci Jet OLEDB provider
Dalje, iz Server explorera prebaci tabelu na Form, to ce ti na formi krerati konekciju i OleDbDataAdapter sa svim odgovarajucim komandama (select/insert/update/delete).
Desno dugme misa na DataAdapter na formi i izaberi "Generate dataset"; iz wizarda izaberi New, daj mu neko ime, iz liste tabela izaberi svoju (verovatno ce biti samo jedna ako nemas druge adaptere na formi) i cekiraj "Add this dataset to the designer". To ce ti u projekat dodati .xsd fajl sa semom koja odgovara semi tabele u bazi, a na formu dodati instancu tog dataseta

U kodu forme jednostavno punis dataset do mile volje i kad zavrsis sa svim unosima i hoces da prebacis dataset u bazu, samo pozovi Update metod DataAdaptera i kao parametar prosledi instancu DataSet-a.


Probaću ovo rešenje negde iduće sedmice (kažu da ne valja raditi posao kod kuće), pa ću javiti da li je bilo ubrzanja u procesu, i kolika su.

U svakom slučaju, hvala na trudu.
 
Odgovor na temu

spartak

Član broj: 5625
Poruke: 631
*.vdial.verat.net.



+3 Profil

icon Re: Kako najbrže napuniti Access bazu?03.12.2004. u 18:46 - pre 236 meseci
Citat:
što često neću raditi ja već neko od tehničara, a za to je mnogo lakše i elegantnije rešenje da kliknu na digme, i izaberu mesec i godinu na koje se odnose podaci

Sta je 40 sec za jednog tehnicara? Taman mu dodje fino da klikne na dugme i zapali cigaretu :-)

Organizaciono ti druze nemas problem. E sad ako si perfekcionista idemo dalje od nedelje...
 
Odgovor na temu

[es] :: .NET :: Kako najbrže napuniti Access bazu?

[ Pregleda: 2741 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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