Database OleDbDataAdapter填充创建重复行

Database OleDbDataAdapter填充创建重复行,database,vb.net,ms-access,oledb,Database,Vb.net,Ms Access,Oledb,我遇到一个问题,我使用数据适配器更新数据表,然后重新填充数据表。调用fill方法后,该行将被复制。一个ID具有正确的(新)ID,另一个ID显示为-1。下面的代码工作得非常完美,是我希望我的更复杂的代码执行的更简单的形式。联合命令如下: Imports WindowsApplication1.testDataSet Imports WindowsApplication1.testDataSetTableAdapters Imports System.Data.OleDb Public Class

我遇到一个问题,我使用数据适配器更新数据表,然后重新填充数据表。调用fill方法后,该行将被复制。一个ID具有正确的(新)ID,另一个ID显示为-1。下面的代码工作得非常完美,是我希望我的更复杂的代码执行的更简单的形式。联合命令如下:

Imports WindowsApplication1.testDataSet
Imports WindowsApplication1.testDataSetTableAdapters
Imports System.Data.OleDb
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        Dim DA As New testTableAdapter
        Dim DT As New testDataTable
        DA.Fill(DT)
        Dim NR As testRow = DT.Rows.Add
        NR.SomeText = "Test"
        Dim DA2 As New OleDbDataAdapter("SELECT * FROM test", _
        DA.Connection.ConnectionString)
        Dim CB As New OleDbCommandBuilder(DA2)
        DA2.Update(DT)
        DA.Fill(DT)
        For Each R As testRow In DT.Rows
            Debug.Print(R.ID)
        Next
    End Sub
End Class
上面的代码工作得很完美。它们的键列不显示-1,没有重复项。现在从下面的代码中考虑下面的代码,这会导致在最后的<代码> Load LoopNoSQL()/<代码> >

之后,键列的重复行导致-- 1。 模块中的其他变量等:

Public LoanNumbersAdapter As OleDbDataAdapter
Public LoanNumbers As New LoanNumbersDataTable
Public Sub InitializeAdapters()
    LoanNumbersAdapter = New OleDbDataAdapter( _
    "SELECT * FROM LoanNumbers WHERE WhenDeleted IS NULL ORDER BY WhenAdded DESC", AccountingConn)
End Sub
Public Function LoadData(ByVal DA As OleDbDataAdapter, ByVal DT As DataTable) As Boolean
    Try
        DA.Fill(DT)
        Return True
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Error loading the " & DT.TableName & " table")
        Return False
    End Try
End Function
Public Function LoadLoanNumbers() As Boolean
    Return LoadData(LoanNumbersAdapter, LoanNumbers)
End Function
为什么顶部的简单测试可以正常工作,但我的实际应用程序创建了键列上带有-1的重复行?我想我可以在更新后填充数据表之前清除数据表,但一旦数据表开始变成一个大表,这不会让它陷入困境吗?
*顺便说一句:DB是MS access,它是.NET 3.5,这是我的管道胶带解决方案:(

“”
''删除ID/键列小于零的任何行
''' 
公共子表(ByVal DT作为数据表)
如果DT.PrimaryKey.Count=0,则退出Sub
对于中的每个R作为数据行_
(数据行中的行作为数据行)_
选择行(DT.PrimaryKey.First.ColumnName)<0)所在的行
R.删除()
下一个
DT.AcceptChanges()
端接头

这是我的管道胶带解决方案:(

“”
''删除ID/键列小于零的任何行
''' 
公共子表(ByVal DT作为数据表)
如果DT.PrimaryKey.Count=0,则退出Sub
对于中的每个R作为数据行_
(数据行中的行作为数据行)_
选择行(DT.PrimaryKey.First.ColumnName)<0)所在的行
R.删除()
下一个
DT.AcceptChanges()
端接头
Public LoanNumbersAdapter As OleDbDataAdapter
Public LoanNumbers As New LoanNumbersDataTable
Public Sub InitializeAdapters()
    LoanNumbersAdapter = New OleDbDataAdapter( _
    "SELECT * FROM LoanNumbers WHERE WhenDeleted IS NULL ORDER BY WhenAdded DESC", AccountingConn)
End Sub
Public Function LoadData(ByVal DA As OleDbDataAdapter, ByVal DT As DataTable) As Boolean
    Try
        DA.Fill(DT)
        Return True
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical, "Error loading the " & DT.TableName & " table")
        Return False
    End Try
End Function
Public Function LoadLoanNumbers() As Boolean
    Return LoadData(LoanNumbersAdapter, LoanNumbers)
End Function
''' <summary>
''' Removes any rows where the ID/key column is less than zero
''' </summary>
<Extension()> Public Sub DeleteRelics(ByVal DT As DataTable)
    If DT.PrimaryKey.Count = 0 Then Exit Sub
    For Each R As DataRow In _
    (From Rows As DataRow In DT.Rows _
     Select Rows Where Rows(DT.PrimaryKey.First.ColumnName) < 0)
        R.Delete()
    Next
    DT.AcceptChanges()
End Sub