Laden...

Tabellen von einem mdb File in ein anderes Kopieren

Erstellt von Console32 vor 11 Jahren Letzter Beitrag vor 11 Jahren 746 Views
C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 11 Jahren
Tabellen von einem mdb File in ein anderes Kopieren

verwendetes Datenbanksystem: <AS Access 2003>

Hallo,

ich versuche gerade eine Methode zu schreiben die mir alle Tabellen einer Datenbank in ein bereits existirendes mdb file schreibt.

Zuerst habe ich es mit BulkCopy versucht jedoch funktioniert das leider nicht.

Deswegen versuche ich jetzt jede Tabelle einzelln auszulesen und zu erstellen,
nun stehe ich vor Folgendem Problem: Ich kann den SqlDatenTyp der Spalten nicht auslesen und wiederverwenden.

Hier mein Verwendeter Code bisher:

                using (OleDbConnection sourceConnection = new OleDbConnection(sourceDatabaseConnectionString))
                {
                    sourceConnection.Open();

                    DataTable tables = sourceConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
                    DataTable sourceTable = new DataTable();

                    foreach (DataRow table in tables.Rows)
                    {
                        string tableName = table["Table_Name"].ToString();
                        string selectCommand = "SELECT * FROM " + tableName + " ;";

                        OleDbDataAdapter sourceAdapter = new OleDbDataAdapter(selectCommand.ToString(), sourceConnection);
                        sourceAdapter.Fill(sourceTable);
                        sourceTable.TableName = tableName;

                        DataTable columns = sourceConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, tableName, null });
                        foreach (DataRow row in columns.Rows)
                        {
                            Console.WriteLine(row[3] + " " + (OleDbType)row[11]);
                        }
                    }

                }

Jedoch bekomme ich als OleDbType nur VarChar und keine länge dazu wenn es sich im einen VarChar Handelt

Nun weiß ich nicht wie ich diesen Datentyp dann weiter verwenden soll um in meinem Creat Command die Richtigen datentypen anzugeben?!

Oder gibt es vielleich generell andere möglichkeiten das zulösen?

C
Console32 Themenstarter:in
258 Beiträge seit 2011
vor 11 Jahren

Ich habe die Länge gefunden sie steht in der Spalte 27

das eigentlich wichtige das Mapping von OleDbType auf den tatsächlen String sieht so aus:

private static string OleDbTypeToString(OleDbType type)
        {
            switch (type)
            {
                case OleDbType.Double:
                    return "Float";
                case OleDbType.DBTimeStamp:
                case OleDbType.DBDate:
                    return "DateTime";
                case OleDbType.Binary:
                    return "Binary";
                case OleDbType.Boolean:
                    return "Bit";
                case OleDbType.UnsignedTinyInt:
                    return "Byte";
                case OleDbType.TinyInt:
                    return "TinyInt";
                case OleDbType.Integer:
                    return "Integer";
                case OleDbType.Currency:
                    return "Currency";
                case OleDbType.Date:
                    return "DateTime";
                case OleDbType.Guid:
                    return "UniqueIdentifier";
                case OleDbType.Char:
                case OleDbType.WChar:
                    return "Text";
                case OleDbType.Single:
                    return "Real";
                case OleDbType.SmallInt:
                    return "SmallInt";
                case OleDbType.Numeric:
                case OleDbType.Decimal:
                    return "Decimal";
                default:
                    return "Unknown";
            }
        }

stammt aus dieser Tabelle (Data Type Mapping) und einem MSDN eintrag Ganz unten im Beispiel

Danke kann geclosed werden.