VB.NET更新し、複数のテーブルをマージし、MS AccessのDB
Dim sSQL As String = "SELECT * FROM tblCars WHERE WeekOf=#6/1/2011#"
Dim da As New OleDb.OleDbDataAdapter(sSQL, conn)
Dim ds As New DataSet
da.Fill(ds, "CarData")
Dim cb As New OleDb.OleDbCommandBuilder(da)
のようなテーブルオブジェクトを作成しています
真新しい。私は、新しいデータでデータのテキストファイルを読み込み、テーブルにこのデータをポンプなどのように新しい行を追加します。
'create a new empty row
Dim dsNewRow As DataRow = ds.Tables("CarData").NewRow()
'update the new row with fresh data
dsNewRow.Item("DriveDate") = dd
dsNewRow.Item("DCode") = dc
dsNewRow.Item("CarNum") = carID
'about 15 more fields
'add the filled row to the DataSet table
ds.Tables("CarData").Rows.Add(dsNewRow)
'end loop
'update the database with the new rows
da.Update(ds, "CarData")
デシベルのテーブルには何の主キーを持っていないが、このすべてが動作し、私はすべての新しいデータを取得しますデータテーブルtblCarsに挿入されます。
これで、データがない車も考慮する必要があります。そのために私の計画は、コントロールテーブルから車のリストを取得し、それをDataテーブルとマージすることでした。
Dim sSQL As String = "SELECT CarId FROM tblControlCars WHERE ActiveCar=True;"
Dim daAct As New OleDb.OleDbDataAdapter(sSQL, conn)
Dim ds As New DataSet
daTail.Fill(ds, "ActCars")
Dim cbAct As New OleDb.OleDbCommandBuilder(daAct)
次に、テーブルのプライマリキーを作成してからマージします。
ds.Tables("CarData").Merge(ds.Tables("ActCars"))
これがアクティブになっているが、任意のデータを取得していないそれらの車のためのデータともプレースホルダを持っている車のためのすべての新しいデータで私にテーブルを与えるだろう。私は戻って、DBへの更新をしようとするときしかし、私はエラーに
のSystem.InvalidOperationExceptionを得る:UpdateCommandのための動的SQLの生成は、任意のキー列情報を返さないSelectCommandに対してサポートされていません。
なぜマージされたデータをデータベースにプッシュできないのか分かりません。