我想从数据库表中获取数据进行修改并更新它,而不依赖于数据库提供程序和数据库结构,因为它将成为库的一部分。
我的第一次尝试如下:
'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
那样复杂的东西。
答案 0 :(得分:2)
也许您的表中包含的列名是访问中的保留字,这里有:
http://support.microsoft.com/kb/248738
您应该更改列名,甚至更好地使用在select子句中列出它们并使用[和],类似这样的
select [username], [password], [time] from tbl1