2015-03-13 75 views
0

我想從我設置到訪問數據庫的vb.net窗體複製數據表。我正在使用其他用戶發佈的一段代碼(有一些更改)(Casbar27,Records added to ms access database with vb 2010 not saving)。有沒有使用vb.net更新訪問表的快速方法?

Back_EndDataSet.tblTest.Clear() 
    Dim adapter As New Back_EndDataSetTableAdapters.tblTestTableAdapter 
    Dim rowCode As DataRow = Back_EndDataSet.tblTest.NewtblTestRefreshxinRow 

    For Each row As DataRow In source.Rows 
     adapter.Fill(Back_EndDataSet.tblTest) 

     rowCode.Item(0) = row.Item(0) 
     rowCode.Item(1) = row.Item(1) 
     rowCode.Item(2) = row.Item(2) 
     rowCode.Item(3) = row.Item(3) 
     rowCode.Item(4) = row.Item(4) 
     rowCode.Item(5) = row.Item(5) 
     rowCode.Item(6) = row.Item(6) 
     rowCode.Item(7) = row.Item(7) 
     rowCode.Item(8) = row.Item(8) 
     rowCode.Item(9) = row.Item(9) 
     Back_EndDataSet.tblTest.AddtblTestRow(rowCode) 


     adapter.Update(Back_EndDataSet.tblTest) 
    Next 

雖然這是行得通的,但速度很慢,如果它運行多次,它會生成同一記錄的倍數。我想要在啓動時擦除訪問表並重寫它,最好在一分鐘之內。有什麼建議麼?

+0

嘗試在退出循環之前執行'.Fill'之前進入循環和'.Update'。至於清空表,在開始使用TableAdapter之前,總是可以使用OleDbCommand對象來運行「DELETE FROM TableName」語句。 – 2015-03-13 18:30:40

回答

0

繼@Gord湯普森的建議,我寫了一個OleDbCommand刪除表,並決定繼續使用的OleDbCommand打算重寫了一個我的填充方法。它的工作很好,完成速度快,我不再有重複的記錄。感謝Gord!

Private Sub UpdateDataBase(ByVal source As DataTable) 
    Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source= H:\AppDev\Visual Studio 2010\Projects\RawFixerTest1\Raw Fixer Back End.accdb") 
    Dim cmdClr As New OleDbCommand 
    Dim cmdFill As New OleDbCommand 
    Dim i = 0 

    con.Open() 
    cmdClr.CommandText = "DELETE * FROM tblTestRefreshxin" 
    cmdClr.Connection = con 
    cmdClr.ExecuteNonQuery() 

    cmdFill.Connection = con 
    For Each row As DataRow In source.Rows 
     cmdFill.CommandText = "INSERT INTO tblTestRefreshxin (numCode, featDesc, alphaCode, clientCode, DTMexclude, attrCode1, attrCode2, attrCode3, attrCode4, lineToPrev) VALUES(" & "'" & row.Item(0) & "','" & row.Item(1) & "','" & row.Item(2) & "','" & row.Item(3) & "','" & row.Item(4) & "','" & row.Item(5) & "','" & row.Item(6) & "','" & row.Item(7) & "','" & row.Item(8) & "','" & row.Item(9) & "')" 
     cmdFill.ExecuteNonQuery() 
    Next 
    con.Close() 
End Sub