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:
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:
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
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
- Private DS As DataSet = New DataSet
- Private con As OleDb.OleDbConnection = New OleDb.OleDbConnection
- Private da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter
- Private catalog As ADOX.Catalog = New ADOX.Catalog()
- Private path As String = "c:\test.mdb"
- Private Sub createDS()
- Try
- Dim conn As ADODB.Connection = New ADODB.Connection()
- conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Me.path
- conn.Open(Nothing, Nothing, Nothing, 0)
- catalog.ActiveConnection = conn
- For i As Integer = 0 To catalog.Tables.Count - 1
- Dim dt As New DataTable
- dt = DS.Tables.Add(catalog.Tables(i).Name)
- For j As Integer = 0 To catalog.Tables(i).Columns.Count - 1
- dt.Columns.Add(catalog.Tables(i).Columns(j).Name, catalog.Tables(i).Columns.Item(j).Type.GetType)
- Next
- Next
- conn.Close()
- Catch ex As Exception
- MessageBox.Show(ex.Message)
- End Try
- 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
- Private Sub readDB()
- con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Me.path
- con.Open()
- For i As Integer = 0 To catalog.Tables.Count - 1
- Dim cmd As String = "SELECT * FROM " & catalog.Tables(i).Name
- da = New OleDb.OleDbDataAdapter(cmd, con)
- da.Fill(DS, catalog.Tables(i).Name)
- Next
- con.Close()
- 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