[ ChildInTime @ 14.08.2007. 12:35 ] @
Pozdrav svima,


Imam sljedeci problemčić : Imam dvije baze (u SQL Server 2005) i trebam da preko coda u samoj aplikaciji koju pravim (C# win aplikacija..recimo klikom na jedno dugme) kopiram podatke iz jedne baze (određene kolone) u drugu bazu,znaci koja ima identičnu strukturu tabela (tih tabela koje trebam da prebacim).

Uglavnom, to sam izveo preko DataSet-ova (data table-ova i adaptera) i sve radi super. Samo najveći je problem vrijeme. Uredu je kada ima manje zapisa (10-ak hiljada redova u tabeli) al kada ima vise ( 1 milion) nastaje problem vremena.

Fazon je u tome sto je moj kolega negdje na internetu naletio na caku kako to izvesti pomocu neke ugrađene kontrole u .NET-u (3-4 linije koda) koja omogućava da to mnogo brze ide, al sad to ne mozemo naci.

Recimo, pomocu DataSet-ova mi treba da 10.000 redova iz jedne tabele (3-4 kolone) iz jedne baze prebacim u drugu tabelu u drugoj bazi oko 50-ak sekundi, a na taj drugi način je trebalo oko 7-8 sekundi..

Da li mozda neko zna kako to uraditi ili gdje bi mogao to naci..ili ako je neko mozda to vec koristio..


U svakom slucaju hvala

Pozdrav


[ sivan347 @ 14.08.2007. 12:57 ] @
Ako su baze na istom serveru ne moras da povlacis podake u dataset pa da ih spustas u drugu bazu. Dovoljno je da odradis insert upit koji ce prebaciti podatke tipa

insert into baza2.tabela
select * from baza1.tabela
[ _prompt @ 14.08.2007. 14:16 ] @
Mozes da pokusas sa SqlBulkCopy, nisam siguran koliko je brza.
Imas primer na http://www.codeproject.com/cs/database/SqlBulkCopy.asp .

Pozdrav
[ MarkoBalkan @ 14.08.2007. 15:20 ] @
Citat:
ChildInTime: Pozdrav svima,


Imam sljedeci problemčić : Imam dvije baze (u SQL Server 2005) i trebam da preko coda u samoj aplikaciji koju pravim (C# win aplikacija..recimo klikom na jedno dugme) kopiram podatke iz jedne baze (određene kolone) u drugu bazu,znaci koja ima identičnu strukturu tabela (tih tabela koje trebam da prebacim).

Uglavnom, to sam izveo preko DataSet-ova (data table-ova i adaptera) i sve radi super. Samo najveći je problem vrijeme. Uredu je kada ima manje zapisa (10-ak hiljada redova u tabeli) al kada ima vise ( 1 milion) nastaje problem vremena.

Fazon je u tome sto je moj kolega negdje na internetu naletio na caku kako to izvesti pomocu neke ugrađene kontrole u .NET-u (3-4 linije koda) koja omogućava da to mnogo brze ide, al sad to ne mozemo naci.

Recimo, pomocu DataSet-ova mi treba da 10.000 redova iz jedne tabele (3-4 kolone) iz jedne baze prebacim u drugu tabelu u drugoj bazi oko 50-ak sekundi, a na taj drugi način je trebalo oko 7-8 sekundi..

Da li mozda neko zna kako to uraditi ili gdje bi mogao to naci..ili ako je neko mozda to vec koristio..


U svakom slucaju hvala

Pozdrav


ucitas sa sql upitom u datatable, ali ne prikazujes u datagridview-u.
i zatim ispod stavis kod za ubacivanje iz datatable.


za 1 milion redova, citanje treba oko 20-30 s, nisam siguran, ali za ubacivanje treba malo duze.ako ubacujes i rucno u bazu iz txt datoteke, opet traje.
na ovaj nacin za 10000 redova, vrijeme je oko 1 s.
za citanje i prikazivanje oko 10000 redova u datagridview-u niti sekunda.
[ ChildInTime @ 14.08.2007. 18:34 ] @
Citat:
_prompt: Mozes da pokusas sa SqlBulkCopy, nisam siguran koliko je brza.
Imas primer na http://www.codeproject.com/cs/database/SqlBulkCopy.asp .

Pozdrav




Mislim da bi moglo biti to to, svaka cast:) Hvala svima na brzim odgovorima i pomoci. Probacu da uradim na vise nacina i testiram, pa kad zavrsim postavicu rezultate..

Pozdrav svima!
[ MarkoBalkan @ 14.08.2007. 20:24 ] @
Citat:
ChildInTime: Mislim da bi moglo biti to to, svaka cast:) Hvala svima na brzim odgovorima i pomoci. Probacu da uradim na vise nacina i testiram, pa kad zavrsim postavicu rezultate..

Pozdrav svima!



Dim c As String = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source=c:\baza.mdb;Jet OLEDB:Database Password= "

Dim co As New OleDb.OleDbConnection(s)
Dim a As New OleDb.OleDbDataAdapter("select * from tablica", c)
Dim d As New DataTable
co.Open()
a.Fill(d)
co.Close()


Dim co1 As OleDb.OleDbConnection
Dim c1 As String
Dim com As OleDb.OleDbCommand


for i as integer=0 to dt.rows.count-1

co1 = New OleDb.OleDbConnection("Provider=Microsoft.jet.Oledb.4.0;Data Source =c:\baza.mdb;Jet OLEDB:Database Password= ")
co1.Open()
c1 = "INSERT INTO tablica(kolona1,kolona2)" & "VALUES('" & dt.Rows(i).Item("kolona1").ToString & "','" & dt.Rows(i).Item("kolona2").ToString & "')"

com = New OleDb.OleDbCommand(c1, co1)
com2.ExecuteNonQuery()

co1.Close()

next

ovo je za access.
samo mijenjas parametre za sql server.
ovo se sve događa klik na gumb.
ovo radi 100%.