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挿入されたため、役に立たないことがわかりました。それはのようなものを生成しました?@param1ParametersINSERT 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 に答える