データベーステーブルからデータをフェッチして変更し、データベースプロバイダーやデータベース構造に依存せずに更新したいのですが、これはライブラリの一部になるためです。
私の最初の試みは次のとおりでした:
'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
です。