DataSet zur Laufzeit aus unbekannter Datenbank erstellen

  • VB.NET

    DataSet zur Laufzeit aus unbekannter Datenbank erstellen

    Hallo!

    Ich möchte ein DataSet zur Laufzeit erzeugen und zwar aus einer unbekannten Datenbankstruktur.
    Die Struktur wird erst zur Laufzeit bekannt.

    Hintergrund: Ich möchte ein Tool programmieren, mit dem Access-Datenbanken ohne MS Access betrachtet und modifiziert werden können. Da hiermit verschiedene Datenbanken mit verschiedenen Stukturen gelesen werden sollen, kann das DataSet erst zur Laufzeit erzeugt werden.

    Mit folgendem Code-Abschnitt erzeuge ich mein DataSet:

    VB.NET-Quellcode

    1. Private DS As DataSet = New DataSet
    2. Private con As OleDb.OleDbConnection = New OleDb.OleDbConnection
    3. Private da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
    4. Private catalog As ADOX.Catalog = New ADOX.Catalog()
    5. Private path As String = "c:\test.mdb"
    6. Private Sub createDS()
    7. Try
    8. Dim conn As ADODB.Connection = New ADODB.Connection()
    9. conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Me.path
    10. conn.Open(Nothing, Nothing, Nothing, 0)
    11. catalog.ActiveConnection = conn
    12. For i As Integer = 0 To catalog.Tables.Count - 1
    13. Dim dt As New DataTable
    14. dt = DS.Tables.Add(catalog.Tables(i).Name)
    15. For j As Integer = 0 To catalog.Tables(i).Columns.Count - 1
    16. dt.Columns.Add(catalog.Tables(i).Columns(j).Name, catalog.Tables(i).Columns.Item(j).Type.GetType)
    17. Next
    18. Next
    19. conn.Close()
    20. Catch ex As Exception
    21. MessageBox.Show(ex.Message)
    22. End Try
    23. End Sub


    Das klappt soweit ganz gut.
    Kommen wir jetzt zu meinem eigentlichen Problem:

    Beim einlesen der selbigen Datenbank mit folgendem Code-Abschnitt gibt es ein Typ-Problem:

    VB.NET-Quellcode

    1. Private Sub readDB()
    2. con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Me.path
    3. con.Open()
    4. For i As Integer = 0 To catalog.Tables.Count - 1
    5. Dim cmd As String = "SELECT * FROM " & catalog.Tables(i).Name
    6. da = New OleDb.OleDbDataAdapter(cmd, con)
    7. da.Fill(DS, catalog.Tables(i).Name)
    8. Next
    9. con.Close()
    10. End Sub


    Die Fehlermeldung:
    "Nicht konvertierbarer Typkonflikt zwischen SourceColumn 'fnObj' von Byte[] und DataColumn 'fnObj' von DataTypeEnum"

    Ich vermute mal, dass hierbei ein QuellTyp nicht zum ZielTyp passt.

    Allerdings habe ich keine Ahnung, wie ich das beheben könnte. Hoffe, mir kann da jemand helfen.


    Gruß Loopy