| 

.NET C# Java Javascript Exception

4
Ich habe 2 räumlich getrennte MySQL-Server, wo ich Teile einer Tabelle vom entfernten Server auf den lokalen Server kopieren muss. Da es jedoch auch mal 10 Mio Zeilen sein können, scheidet der Weg mit dem MySqlDataReader aus - die Laufzeit ist einfach unterirdisch, wenn man so viele Insert Into loslassen muss. Also dachte ich, ich lasse eine Schleife laufen, die jeweils 1000 Datensätze in eine DataTable holt und wieder schreibt, bis alle gewünschten Zeilen kopiert sind. Der innenliegende Code schaut so aus:

Dim dt As New DataTable
Dim source As New MySqlDataAdapter("select * from sourcetabelle where <bedingungen>",sourceconnection)
Dim tconn As New MySqlConnection(targetconnection)
Dim tcom As New MySqlCommand("insert into zieltabelle(@p1,@p2) values (@p1,@p2)",tconn)
tcom.Parameters.Add("@p1", MySqlDbType.VarChar)
tcom.Parameters.Add("@p2", MySqlDbType.VarChar)
Dim target As New MySqlDataAdapter(tcom)
source.Fill(dt)
target.Update(dt)

In der DataTable sind die Zeilen drin, aber das target.Update schreibt nicht in die Zieltabelle. Wer kann mir den entscheidenden Tipp geben?

Edit: Tags ergänzt
28.03.2013
muffi 1,4k 1 9
muffi 1,4k 1 9
2 Antworten
1
Da man eine Antwort nicht löschen kann: Vergesst es, ich hatte das MySQL übersehen. Meine Antwort bezieht sich auf SQL Server.

Für die, die es doch interessiert, lass ich den Text stehen.

Wenn Du tatsächlich Millionen von zeilen zu kopieren hast, würde ich Dir dringend raten, SqlBulkCopy zu verwenden. Ist ganz einfach und genau dafür vorgesehen.

Guckst Du:
Hier
oder hier oder hier.
28.03.2013
JEwen 2,7k 5
Sorry, vergiss es! Ich sehe gerade mySQL. Habe ich total überlesen!
JEwen 28.03.2013
Die Variante, wie sie auf der Microsoft-Seite beschrieben ist, gefällt mir recht gut, jedoch habe ich im MySql-Treiber kein MySqlBulkCopy :-(
muffi 28.03.2013
Habe es gerade gemerkt :-)
JEwen 28.03.2013
Wäre der MySQL Befehl Load Data eine Hilfe?
http://dev.mysql.com/doc/refman/5.5/en/load-data.html
JEwen 28.03.2013
Load Data und MySqlBulkLoader sind keine Alternative, weil ich auf den entfernten Server leider nur mit Abfragen rankomme. Sonst wäre das ja kein Thema, das Ganze über die Workbench zu exportieren.
muffi 28.03.2013
Vergiss es, exportieren über die Workbench ist auch nicht wirklich das Richtige. Die Bedingungen ändern sich ja, deswegen können es mal 1000 aber auch 10 Mio Sätze sein.
muffi 28.03.2013
1
Ich habe zwar lange nichts mehr mit DataTable & Co gemacht, könnte mir aber vorstellen, dass das ganze nicht funktioniert, weil der DataAdaper mit den Informationen, die du ihm gibst (unspezifizierte DataTable, unvollständiges SQL (damit meine ich nur Select bzw. Insert)) nicht vernünftig arbeiten kann. Versuch doch mal die DataTable explizit zu definieren (sprich definiere die Spalten, welche in der DataTable enthalten sein sollen, und das Mapping auf deine Tabellenspalten). Du solltest auch die Spalten im Select vom ersten DataAdapter explizit angeben.

Ich habe noch nicht mit MySql gearbeitet, abe hast du eigentlich schon nachgeschaut, ob der MySql-Provider irgendwelche Caching-Mechanismen unterstützt?

Gruß
Klaus
29.03.2013
luedi 2,0k 1 9
Der Ansatz ist vielleicht gar nicht schlecht, ich hole mir via describe table sowieso die Spaltenstruktur. Damit kann ich den select/insert generieren. Falls das Erfolg hat, werde ich berichten.
muffi 02.04.2013

Stelle deine .net-Frage jetzt!