1
我打一個MS Access數據庫與VB2005和我創造這樣VB.NET合併多個表,然後更新MS Access數據庫
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")
在db表中沒有主鍵,但是這一切工作,並讓我的所有新數據插入數據表tblCars。
現在恰巧我也必須考慮沒有數據的汽車。爲此,我的計劃是從控制表中獲取汽車列表並將其與數據表合併。
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。
我不確定我明白爲什麼合併數據無法推送到數據庫。