我努力解决我的问题,这就是我要做的事情:
ReadXML
加载到数据集(“ds”),
数据集中填入了几个表,我关注的是这个表
about is(“SalesReceiptRet”),我将其称为源
表OleDBAdapter.Fill
的数据集到名为(“dtTarget”)的数据表中
并且适配器的名称是(“dbAdapter”)。我想浏览源表中的所有记录,查找名为(“TxnID”)的字段以在目标表中查找记录。如果它不存在,请添加它,如果它确实进行了另一次验证并使用源行覆盖/更新它。
这是代码:
Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
'Initialize command builder
Dim dbCommandBuilder As New OleDb.OleDbCommandBuilder(dbAdapter)
'Set the primary keys
ds.Tables("dtTarget").PrimaryKey = New DataColumn() {ds.Tables("dtTarget").Columns("TxnID")}
'Find rows
Dim dr As DataRow
Dim lookupRow As DataRow
For Each dr In ds.Tables("SalesReceiptRet").Rows
lookupRow = ds.Tables("dtTarget").Rows.Find(dr.Item(0))
'If the a row with a similar TxnID exists, do the following validation
If Not (lookupRow Is Nothing) Then
If lookupRow.Item(8).ToString <> "Regular" Then
'do something here to overwrite/update the matching row
End If
Else
'If the row does not exist, import it
ds.Tables("dtTarget").ImportRow(dr)
End If
Next
'Update Access
dbAdapter.Update(ds, "dtTarget")
dbConnection.Close()
End Sub
也许我需要提一下两个表都有确切的列名,除了Access“dtTarget”还有其他的,这似乎不会导致问题,至少导入行。
有什么想法吗?
答案 0 :(得分:0)
这应该让你开始,
有关Access的更多帮助以及适配器上的插入/更新,请参阅此链接 http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataset/thread/958e6d51-725a-4649-8fc0-79a831f8f37e
Dim connStr As String = "Provider=SQLNCLI10;Server=(local);Database=MyNewTest;Uid=user; Pwd=******;"
Dim selectCmd As String = "select * from IdentityTest"
Dim dbAdapter As New OleDb.OleDbDataAdapter(selectCmd, connStr)
dbAdapter.AcceptChangesDuringUpdate = True
'code here to fille up your adapter
'build the insert and update comand on the adapter
Dim InsertCommans As New OleDb.OleDbCommand("INSERT INTO <table> (field1,field2,field3,field4) Values (@val1,@val2,@val3,@val4)")
Dim UpdateCommans As New OleDb.OleDbCommand("UPDATE <table> SET <field> = @Value WHERE <field> = @TxnID")
'Set the primary keys
Dim ds As DataSet
ds.Tables("dtTarget").PrimaryKey = New DataColumn() {ds.Tables("dtTarget").Columns("TxnID")}
'assign our datatables
Dim oDtSource As DataTable = ds.Tables("SalesReceiptRet")
Dim oDtTarget As DataTable : dbAdapter.Fill(oDtTarget)
'for each TxnID in our source table
For Each dr As DataRow In oDtSource.Rows
'get the rows in the target that match to the current source table row taxnid [colname] = TxnID
Dim oRowsInTarget As DataRow() = oDtTarget.Select("[" & oDtTarget.Columns(0).ColumnName & "] = " & dr("TxnID"))
'if there is a match (assuming there will only be one) and the column 8 contents (this is column 9 in reality)
'dowes not equal "Regular" then proceed to run the ole adapter update statement else insert
If oRowsInTarget.Count > 0 AndAlso Not oRowsInTarget(0)(8).ToString <> "Regular" Then
'perform our update
'you have thematching TxnId in dr("TxnID")
'I think you can configure an insert and update statment on the Ole adapter connected to access
'EXEC UPDATE ON THE ADAPTER
ElseIf oRowsInTarget.Count > 0 Then
'EXEC INSERT ON THE ADAPTER
End If
Next