Hallo VB.NET Kollegen,
ich stehe vor folgendem Problem:
Ich muss eine Tabelle mit zwei spalten in einer dBase IV Datei speichern. Prinzipiell klappt dies auch. Zuerst wird eine leere dBase Tabelle mit den ensprechenden Spalten erzeugt.
Danach wird die Tabelle in ein DataSet überführt, das DataSet mit Daten gefüllt und gespeichert.
Dazu verwende ich einen DataAdapter und einen CommandBuilder, der mir die Update & Insert Kommandos genieriert.
Nun ist es leider so, dass eine der Spalten "TEXT" heißen muss, damit ein bestehendes und nicht änderbares Programm die Datei aktzeptiert.
Beim Select Kommando kann ich die Spalte noch mit eckigen Klammern kennzeichnen, der CommandBuilder verwendet sie dann aber nicht mehr, sodass die Befehle nicht (oder nur mit Fehler) abgesetzt werden können. Ändert man die Bezeichnung in "TEXT_" funktionieren die generierten Kommandos tadellos.
Nun habe ich schon probiert, die generierten Kommandos nachzubilden, und diese zu verwenden.
Hier erscheint dann allerdings eine Fehlermeldung "Parameter?_1 hat keinen Standardwert". Ich habe jedoch keine Möglichkeit gefunden, diesen anzugeben.
Auch habe ich die vom CommandBuilder generierten Kommandos nach dieser Eigenschaft durchsucht aber nichts gefunden.
-> kann und falls la wo kann man diese Standardwerte angeben?
Anbei noch ein paar Code-Schnipsel, um euch eine bessere Übersicht:
' VARIANTE 1 -> mit CommandBuilder -------------------
Dim connDBase As New OleDbConnection
Dim cmdDBaseSelect As New OleDbCommand
Dim daDBase As New OleDbDataAdapter
Dim dsDBase As New DataSet
Dim SqlSelectQuery As String = "SELECT [SATZ], [TEXT] FROM TABELLE"
connDBase.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data" & _
"Source=D:\;Extended Properties=DBASE IV;"
connDBase.Open()
cmdDBaseSelect.Connection = connDBase
cmdDBaseSelect.CommandText = SqlSelectQuery
daDBase.SelectCommand = cmdDBaseSelect
dsDBase.Tables.Add("Tabelle")
daDBase.Fill("Tabelle")
' DataSet dsDBase füllen
Dim CmdB1 As OleDbCommandBuilder = New OleDbCommandBuilder
CmdB1.DataAdapter = daDBase
daDBase.UpdateCommand = CmdB1.GetUpdateCommand()
daDBase.InsertCommand = CmdB1.GetInsertCommand()
Try
daDBase.Update(dsDBase, StrFileWoExt.ToUpper)
Catch ex As Exception
MsgBox(ex.Message)
Finally
connDBase.Close()
End Try --> Ergebnis: Fehler in Insert Kommando (Vermutung wegen Fehlender [] Klammern)
' VARIANTE 2 -> Kommandos selbst erstellt -------------------
Dim cmdDBaseInsert As New OleDbCommand
Dim cmdDBaseUpdate As New OleDbCommand
cmdDBaseInsert.Connection = connDBase
cmdDBaseInsert.CommandText = "INSERT INTO TABELLE ([SATZ], [TEXT]) VALUES (?," & _
"?)"
daDBase.InsertCommand = cmdDBaseInsert
cmdDBaseUpdate.Connection = connDBase
cmdDBaseUpdate.CommandText = "UPDATE TABELLE SET [SATZ]= ?, [TEXT] = ? WHERE ((" & _
"[SATZ]= ?) AND ((? = 1 AND [TEXT] IS NULL) OR ([TEXT] = ?)))" ' von CmdB
' übernommen, nur um [] ergänzt
daDBase.UpdateCommand = cmdDBaseUpdate
daDBase.InsertCommand.Parameters.Add("@p1", OleDbType.VarChar, 50, "[SATZ]")
daDBase.InsertCommand.Parameters.Add("@p2", OleDbType.VarChar, 50, "[TEXT]")
daDBase.UpdateCommand.Parameters.Add("@p1", OleDbType.VarChar, 50, "[SATZ]")
daDBase.UpdateCommand.Parameters.Add("@p2", OleDbType.VarChar, 50, "[TEXT]")
daDBase.UpdateCommand.Parameters.Add("@p3", OleDbType.VarChar, 50, "[SATZ]")
daDBase.UpdateCommand.Parameters.Add("@p4", OleDbType.VarChar, 50, "[TEXT]")
daDBase.UpdateCommand.Parameters.Add("@p5", OleDbType.VarChar, 50, "[TEXT]") --> "Parameter?_1 hat keinen Standardwert"
Kann mir jemand helfen, die Kommandos richtig anzugeben oder sagen wie ich den CommandBuilder dazu bringe, die [] Klammern zu verwenden?
Danke & Gruß
neckisch |