我想要从数据库表中获取数据修改并更新它,而不依赖于数据库提供程序和数据库结构,因为它将成为库的一部分。DbCommandBuilder不按预期工作
我第一次尝试如下:
'factory defined somewhere else as DbProviderFactory
'connection is a working DbConnection
Dim selectcmd As DbCommand = connection.CreateCommand()
Dim adapter As DbDataAdapter = factory.CreateDataAdapter()
Dim builder As DbCommandBuilder = factory.CreateCommandBuilder()
selectcmd.Connection = connection
selectcmd.CommandText = "SELECT * FROM tbl1"
adapter.SelectCommand = selectcmd
builder.DataAdapter = adapter
Dim ds As New DataSet
'Fetch data
adapter.Fill(ds)
'Change something in ds
adapter.Update(ds) '<- exception occurs
这并没有工作,因为CommandBuilder
没有产生Update-
,Insert-
和DeleteCommand
自动尽管文件称它应该做的。
但是,即使我说
adapter.InsertCommand = builder.GetInsertCommand()
adapter.UpdateCommand = builder.GetUpdateCommand()
adapter.DeleteCommand = builder.GetDeleteCommand()
没有奏效。经过进一步调查,我发现生成的Commands
CommandBuilder
是无用的,因为它插入了?
而不是@param1
,对于所有Parameters
。它生成的东西类似INSERT INTO tbl1 (field1, field2, field3) VALUES (?, ?, ?)
InsertCommand
我真的很喜欢使用CommandBuilder,因为它很简单,我没有像JOINS
那样复杂的东西。
你用什么Db? '?'看起来适合Access,也许适合其他人。 – 2011-05-27 17:50:22
对于测试,我使用了一个Access mdb的OleDb – Karsten 2011-05-27 17:51:59
它是否失败/使用Access?在第二部分中,你说“没有工作”,完全没有帮助。总是描述发生了什么,你的期望等等。 – 2011-05-27 17:55:10