2013-05-16 2 views
0

Я так старался, чтобы решить мою проблему, вот что я пытаюсь сделать:Update, добавить строки в DataTable VB.Net

  • У меня есть файл XML, который я загружаю в наборе данных («ds») с использованием ReadXML, несколько таблиц занесены в набор данных, один из которых касается about is («SalesReceiptRet»), и я буду называть его в качестве таблицы .
  • У меня есть другая таблица в базе данных MS Access, я загрузить его в те же
    набор данных с использованием OleDBAdapter.Fill, в DataTable с именем («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 

Может быть, я должен упомянуть, что обе таблицы имеет точные имена столбцов для доступа «dtTarget» за исключением имеет дополнительные те, которые не кажется, вызывают проблемы, по крайней мере с импортом ряд.

Любые мысли, пожалуйста?

+0

Что ваш код делает прямо сейчас? Разве это не обновление? Это не импорт? Это ошибка? – Tim

+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 
+0

Привет, Andre и спасибо, Я пытался использовать один из встроенных методов класса, как будто я собираюсь написать UPDATE sql-команда будет очень длинной .. У меня более 60 столбцов. –

Смежные вопросы