Hallo Leute!
Bin gerade dabei für zukünftige Projekte eine Datenklasse zu schreiben (von der alle Entitäten der Datenbank erben). Naja, jedenfalls hat diese Datenklasse eine Möglichkeit einen Dataadapter für eine bestimmte Tabelle in der Datenbank zu erhalten.
Dazu gibt es die function "GetDataAdapter", die einen neuen DataAdapter instanziert und die Commands zuweist. Nun meine Frage: Ich arbeite komplett ohne die VB.NET Wizards für's generieren von DataAdapters (klar, wenn ich dynamisch generieren muss, geht das ja nicht).
Blöderweise funktionieren nun meine Commands des Adapters nicht. Fill funktioniert (na gut, ein Select schaffe ich ja noch *gg*), aber bei INSERT geht's nicht.
Kurzer excerpt:
'Get the dataadapter
lAdapter = Facade.HelperDatabase.GetAdapter("SELECT" & _
"ID,TableName,RecordID,UserID FROM tabSystemLockedRecords", "INSERT" & _
"INTO tabSystemLockedRecords(TableName, RecordID, UserID) VALUES (" & _
"@TableName, @RecordID, @UserID); SELECT ID, TableName, RecordID," & _
"UserID FROM tabSystemLockedRecords WHERE (ID = @@IDENTITY)", "UPDATE" & _
"tabSystemLockedRecords SET TableName = @TableName, RecordID =" & _
"@RecordID, UserID = @UserID WHERE (ID = @Original_ID) AND (RecordID" & _
"= @Original_RecordID OR @Original_RecordID IS NULL AND RecordID IS" & _
"NULL) AND (TableName = @Original_TableName OR @Original_TableName IS" & _
"NULL AND TableName IS NULL) AND (UserID = @Original_UserID OR" & _
"@Original_UserID IS NULL AND UserID IS NULL); SELECT ID, TableName," & _
"RecordID, UserID FROM tabSystemLockedRecords WHERE (ID = @ID)", _
"DELETE FROM tabSystemLockedRecords WHERE (ID = @Original_ID)")
'Set the table property
lTable.TableName = "tabSystemLockedRecords"
'Fill the table
lAdapter.Fill(lTable)
'Create a new row
lRow = lTable.NewRow
'Enter the data for this row
lRow.Item("TableName") = TableName
lRow.Item("RecordID") = ID
lRow.Item("UserID") = 1
'Add the row to the datatable
lTable.Rows.Add(lRow)
'MsgBox(lTable.Rows.Count)
'Update the data source
lAdapter.Update(lTable) Wie man sieht, den SQL-Code habe ich von einem Wizard (zum Testen) generieren lassen. Blöderweise bekomme ich bei "lAdapter.Update(lTable)", also in der letzten Zeile, einen Fehler der system.data zurück - leider ein nichtssagender Fehler.
Meine Frage: wie müssen die Paramter heißen? Woher weiß VB, welcher Paramter mit welchem Wert bestückt werden muss? Kann das so überhaupt funktionieren?
Vielen Dank für Eure Hilfe.
Liebe Grüße,
Bernd |