Autor Beitrag
bilal
Hält's aus hier
Beiträge: 2

WIN XP, debina-etch, MacOS
PHP, Java-Script, C#
BeitragVerfasst: Do 17.07.08 13:37 
Hallo Forum,


Ich arbeite seit 2-3 Wochen mit c# ... Vielleicht wurde das Problem schon behandelt aber habe leider nix gefunden... Sorry falls doppelt!


Ich habe ein dBase-File (*.dbf) welches ich mit folgendem Code in ein DataTable einlese:

ausblenden Einelsen des dbf- Files:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
DataTable myTable = new DataTable();

System.Data.Odbc.OdbcConnection myConn = new System.Data.Odbc.OdbcConnection();
myConn.ConnectionString = "driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;";

myConn.Open();

System.Data.Odbc.OdbcCommand myCommand = myConn.CreateCommand();
myCommand.CommandText = "Select * from PfadZumDBF-File.dbf";
myTable.Load(myCommand.ExecuteReader());

string tName = TabellenName;
myTable.TableName = tName;



Nun soll das komplett ausgelesene dbf-File in Form von DataTable, in eine bestehendes MySQL-DB importiert/eingelesen werden. Dabei soll die Tabelle incl. aller Cols und Rows und Eigenschaften (Numeric, Char, etc...) automatisch erstellet werden.
Anschliessen, rein mit den Daten!

bis hier hab ich's:

ausblenden Import in die MySQL-DB
1:
2:
MySqlConnection myImportConn = new MySqlConnection("Data Source = localhost; UID = root; PASSWORD = PWD; Persist Security Info=yes");
MySqlDataAdapter myDataAdap = new MySqlDataAdapter(myImportComm, myImportConn);


Wie gehe ich weiter vor? Ist das der richtige Ansatz? Wäre dankbar für jedes Stück Code
und Tip...

King Regards.

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 17.07.08 14:05 
Hallo und :welcome:

Grundsätzlich ist das der richtige Weg: Einlesen in eine DataTable und speichern in der Datenbank. Es gibt freilich keine Automatik, mit der aus einer DataTable-Struktur eine Tabelle in einer Datenbank erstellt werden kann. Du musst manuell aus der DataTable einen DbCommand mit "CREATE TABLE" und allen dazugehörigen Einzelheiten erstellen und diesen per DbCommand.ExecuteNonQuery() - also ohne DbDataAdapter - an die Datenbank schicken. Danach kannst Du die Inhalte per DbDataAdapter.Update() speichern.

Dabei gibt es noch ein Problem: Die Update-Methode prüft für alle Zeilen der DataTable den RowState. Es hat aber normalerweise nach dem Einlesen jede Zeile den Status Unchanged; Du benötigst aber überall den Status Added. IIRC gibt es einen Weg, beim Einlesen (bei Deinem Vorgehen DataTable.Load) den Status zu erhalten, also auf Added zu setzen. Leider weiß ich nicht mehr, wo ich das gelesen habe; ich muss Dich deshalb bitten, selbst nach diesen Stichworten zu suchen.

Viel Erfolg! Jürgen

PS. Bei meinen Hinweisen benutze ich meistens Verweise auf die Db-Klassen. Dies musst Du immer auf den passen Provider übertragen, also auf Odbc-Klassen für die Quelldateien und MySql-Klassen für die Zieldateien.
bilal Threadstarter
Hält's aus hier
Beiträge: 2

WIN XP, debina-etch, MacOS
PHP, Java-Script, C#
BeitragVerfasst: Do 17.07.08 14:30 
Erst mal danke für die schnelle Antwort...

Das habe ich mir fast gedacht mit der Erstellung der Tabelle und Eigenschaften :( Wäre auch kein Problem, wenn es nur ein dbf-file wäre... Das Projekt hat ca. 18-20 Kategorien und innerhalb jeder Kategorie sind 48-50 dbf-Files vorhanden, die voneinander abweichen. Gesamtmenge an daten betragen ca. 48 GB... :(


... Mir bleibt wohl nichts anderes übrig, den mühsamen weg zu beschreiten... Aber werde für alle Nachkommen immer wieder ein paar Script-Schnippsel posten wenn ich was sinnvolles entdecke...


Nochmals Danke...


Wie ist es eigentlich wenn ich per WriteXMLScheme den Scheme einfach auslese? Lässt der sich in die MySQL überführen... Einer schon Erfahrung?


CU.

Moderiert von user profile iconChristian S.: Überflüsige Zeilenumbrüche entfernt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 17.07.08 16:24 
Hallo Bilal,

das ist eine gute Voraussetzung dafür, dass Du selbst eine kleine Lösung erstellst: eine Klasse, die möglichst Db-unabhängig aus einer DataTable einen DbCommand mit "CREATE TABLE" erstellt und ausführt. Indizes und PrimaryKeys können dabei berücksichtigt werden; ForeignKeys müssten manuell nachgetragen werden.

Wenn Du einen Weg hast, der aus einer dBase-Datei ein xsd-Schema erstellt, hilft das natürlich ungemein; denn damit hast Du "sofort" eine DataTable in einem DataSet. Aber der wichtigere Schritt fehlt weiterhin, nämlich aus xsd eine DB-Tabelle zu erzeugen.

Vielleicht gibt es auch schon eine passende Lösung, z.B. unter CodeProject.

Die Gesamtmenge der Daten ist natürlich allenfalls ein Zeitproblem. Für das Programmieren einer eigenen Lösung ist die Anzahl der Datenstrukturen (Tabellen gleich dbf-Dateien) relevant.

Jürgen