我想从数据库表中获取数据对其进行修改和更新,而不依赖于数据库提供程序和数据库结构,因为它将是库的一部分。
我的第一次尝试如下:
'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
的文件没有用,因为它是 insert?
而不是@param1
for all Parameters
。它产生了类似INSERT INTO tbl1 (field1, field2, field3) VALUES (?, ?, ?)
的东西InsertCommand
我真的很想使用 CommandBuilder,因为它很简单,而且我没有像JOINS
.