0

我想从数据库表中获取数据对其进行修改和更新,而不依赖于数据库提供程序和数据库结构,因为它将是库的一部分。

我的第一次尝试如下:

'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?而不是@param1for all Parameters。它产生了类似INSERT INTO tbl1 (field1, field2, field3) VALUES (?, ?, ?)的东西InsertCommand

我真的很想使用 CommandBuilder,因为它很简单,而且我没有像JOINS.

4

1 回答 1

2

也许您的表包含在访问中是保留字的列名,这里有:

http://support.microsoft.com/kb/248738

您应该更改列名,甚至更好地使用在 select 子句中列出它们并使用 [ 和 ],类似这样

select [username], [password], [time] from tbl1
于 2011-05-27T19:57:52.130 回答