dbf nach mysql per odbc - suche bessere Lösung

19/10/2008 - 10:50 von Marc-André Kaiser | Report spam
Hallo,

Abstract: Suche schnelleren Export für 20 dbf Dateien zum MySQL-
Server, das funktionierende Programm ist nicht gut geschrieben.

Ich habe 20 dbf-Dateien, die ich regelmàßig in meinen MySQL-Server
einlese.
Das geschieht mit Hilfe einer selbstgeschriebenen Visual Basic .NET
Anwendung.
Allerdings ist dieser Export ein wenig langsam, was an meiner
umstàndlichen
Programmierung liegt.
Hier die Funktion, welche die Dateien/Daten übertràgt:

Function dbf_to_mysql(ByVal tabelle as String) as String
Dim ds As Data.DataSet = New Data.DataSet
Dim selstr As String = "select * from " & tabelle
Dim da As New Data.Odbc.OdbcDataAdapter(selstr,con_dbf)
da.AcceptChangesDuringFill=False

'read dbf
da.Fill(ds,tabelle)


Dim da1 As New Data.Odbc.OdbcDataAdapter(selstr,con_mysql)
Dim cb As New Data.Odbc.OdbcCommandBuilder(da1)
Dim comm As New Data.Odbc.OdbcCommand
comm.Connection=con_mysql
comm.CommandText="truncate " & Tabelle

try
con_mysql.Open()
comm.ExecuteNonQuery()

'write mysql
da1.Update(ds,tabelle)
Catch ex As System.Exception
msgbox(ex.Message)
Finally
con_mysql.Close()
End Try
Return Tabelle & " ok!"
End Function

Die ODBC-Verbindung zu den dbf-Dateien ist --> Driver={Microsoft
Visual FoxPro Driver};SourceTypeÛF;SourceDB=c:\Programme\Test\data
\;Exclusive=No;collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;
Die ODBC-Verbingung zu MySQL ist --> DRIVER={MySQL ODBC 5.1
Driver};SERVER=localhost; database=iqplus;UID=xx;PASSWORD=xx

Wie man sieht schreibe ich erst in ein Dataset, dann übertrage ich das
per Update in den DataAdapter (MySQL) und schreibe das ganze zum
Schluß zurück auf den Server. Recht
umstàndlich, aber leider die einzige Möglichkeit, die ich zum Laufen
bekommen habe.

Bisher konnte ich in keinen Beitrag / keine Hilfe finden, um das
direkte Auslesen von dbf
zu MySQL in einem Schritt durchzuführen.

Kann mir jemand helfen?

Mit besten Grüßen,

Marc-André
 

Lesen sie die antworten

#1 Winfried Wille
19/10/2008 - 15:41 | Warnen spam
Hallo,

wenn du deinen Code auf die Laufzeit des Lesen und Schreibens in die
Datenbank untersuchst, wirst du hoechstwahrscheinlich das Ergebnis erhalten,
das mindestens 80% der Zeit beim Schreiben in den SQL-Server verloren geht.
Diese Zeit laesst sich durch Einsatz der .Net bulk copy Befehle sehr stark
verbessern, siehe:

http://www.codeproject.com/KB/datab...kCopy.aspx

Du musst dann aber bei dem Einsatz von bulk copy Operationen deine
Backup-Loesung ueberpruefen.

Viele Gruesse
Winfried Wille

Ähnliche fragen