我想要從數據庫表中獲取數據修改並更新它,而不依賴於數據庫提供程序和數據庫結構,因爲它將成爲庫的一部分。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