Database SqlDataAdapter.Update未更新

Database SqlDataAdapter.Update未更新,database,sqldataadapter,Database,Sqldataadapter,我应该说我对vb.net还很陌生 我在覆盖数据库中的条目时遇到问题。我认为问题在于SqlDataAdapter.Update没有使用我创建的新数据表信息正确覆盖数据库 据我所知,当我告诉它更新时,它应该用datatable完全替换数据库中的信息。。。没有 简而言之,问题在于: 基本上,我有一个database.mdf文件,其中有一个名为“test”的表。我已经使用SqlDataAdapter使用“test”创建了一个数据集。我还有另一个数据表,是通过csv解析生成的,叫做“ToLoad”。我现在

我应该说我对vb.net还很陌生

我在覆盖数据库中的条目时遇到问题。我认为问题在于SqlDataAdapter.Update没有使用我创建的新数据表信息正确覆盖数据库

据我所知,当我告诉它更新时,它应该用datatable完全替换数据库中的信息。。。没有

简而言之,问题在于:

基本上,我有一个database.mdf文件,其中有一个名为“test”的表。我已经使用SqlDataAdapter使用“test”创建了一个数据集。我还有另一个数据表,是通过csv解析生成的,叫做“ToLoad”。我现在想清除“测试”数据表,从csv数据表中复制所有条目,然后将其保存到数据库中

我已经调试了所有这些,看起来一切正常,除了使用SqlDataAdapter.Update时,我收到一个错误,告诉我不能复制主键。这是因为在从datatable中输入新条目之前,旧条目不会完全从数据库中清除

我已经检查了测试数据表是否在代码的早期被清除。。。的确如此。 我已检查新的csv条目是否被复制到“测试”数据表中。。。他们是

如果您能在这方面给予任何帮助,我们将不胜感激

谢谢 克雷格


经过一段时间的谷歌搜索和一些尝试和错误之后,我自己设法解决了这个问题。发布我的代码以防对其他人有用

克雷格

'MAKE A NEW SQL CONNECTION
Dim DBConnection As New SqlConnection

'SET THE CONNECTION STRING.
DBConnection.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Project\Members.mdf;Integrated Security=True"

'OPEN THE CONNECTION TO THE DATABASE
DBConnection.Open()

'OPEN AN ADAPTER AND SELECT EVERYTHING FROM THE 'TEST' TABLE
Dim mySqlDataAdapter As New SqlDataAdapter("SELECT * FROM Test", DBConnection)
Dim mySqlCommandBuilder As New SqlCommandBuilder(mySqlDataAdapter)





Dim DBDataset As DataSet = New DataSet

'FILL THE DATASET WITH THE TEST TABLE  
 mySqlDataAdapter.Fill(DBDataset, "Test")

'CLEAR ALL ENTRIES IN THE DATATABLE (SO I CAN FILL IT FROM SCRATCH)
 DBDataset.Tables("test").Clear()





 ''SET UP A LOOP TO ADD EACH RECORD FROM THE CSV DATATABLE TO THE DATABASE DATATABLE

  Dim CSV_row_number As Int16
  CSV_row_number = ds.Tables("toload").Rows.Count


  Dim i As Int16   
  i = 0
       Do Until i = CSV_row_number - 1


            'MAKES TWO NEW DATAROW OBJECTS
            Dim DB_row As DataRow
            Dim CSV_row As DataRow

            'SET THE CSV_ROW OBJECT EQUAL TO ROW(i) OF THE CSV DATATABLE
            CSV_row = ds.Tables("toload").Rows(i)

            DB_row = DBDataset.Tables("test").NewRow()

            'THIS SETS ALL OF THE COLUMNS IN THIS NEW ROW AS EQUAL TO ROW1 IN THE CSV DATATABLE
            DB_row("Name") = CSV_row("Name")
            DB_row("Quality") = CSV_row("Address")
            DBDataset.Tables("test").Rows.Add(DB_row)

            i = i + 1

        Loop



 mySqlDataAdapter.Update(DBDataset.Tables("Test"))
 'MAKE A NEW SQL CONNECTION
    Dim DBConnection As New SqlConnection

    'SET THE CONNECTION STRING. YOU GET THIS BY GOING TO SERVER EXPLORER, THEN CLICKING ON THE DATABASE
    'THE CONNECTION STRING IS IN PROPERTIES 
    DBConnection.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\ME\Project\Members.mdf;Integrated Security=True"

    'OPEN THE CONNECTION TO THE DATABASE
    DBConnection.Open()



    'THIS OPENS AN ADAPTER TO THE DATABASE, AND SELECTS EVERYTHING FROM THE 'TEST' TABLE IN THAT DATABASE
    Dim mySqlDataAdapter As New SqlDataAdapter("SELECT * FROM MemberList", DBConnection)
    'THIS LETS US USE SQL ON THE DATATABLE (IT GETS PASSED THE ABOVE SQL STATEMENT)
    Dim mySqlCommandBuilder As New SqlCommandBuilder(mySqlDataAdapter)


    'THIS MAKES ANOTHER NEW DATASET 
    Dim DBDataset As DataSet = New DataSet


    ''THIS FILLS THAT DATASET WITH THE TEST TABLE (WHICH THE DATA ADAPTOR GRABBED ABOVE) 
    mySqlDataAdapter.FillSchema(DBDataset, SchemaType.Source, "MemberList")
    mySqlDataAdapter.Fill(DBDataset, "MemberList")


    'THIS MAKES A NEW DATATABLE 
    'I THEN MAKE ALL CHANGES NEEDED 

    Dim EDITmembers As DataTable
    EDITmembers = DBDataset.Tables("MemberList")


    ''FIRST, IM GOING TO CLEAR ALL ENTRIES IN THE DATATABLE (SO I CAN FILL IT FROM SCRATCH)

    'COUNT THE NUMBER OF ENTRIES TO CLEAR
    Dim RowsInDB As Integer
    RowsInDB = EDITmembers.Rows.Count()

    'SET UP A LOOP TO CLEAR THEM
    Dim Data_row As DataRow
    Dim k As Integer = 0

    Do Until k = RowsInDB

        Data_row = EDITmembers.Rows(k)

        Data_row.Delete()

        k = k + 1

    Loop

    'ONCE ALL THE ROWS ARE CLEARED, SAVE THE CHANGES BY UPDATING THE ACTUAL DATABASE
    mySqlDataAdapter.Update(DBDataset, "MemberList")





    ''THEN I SET UP A LOOP TO ADD EACH RECORD FROM THE CSV DATATABLE TO THE DATABASE DATATABLE
    ''I FIRST NEED TO KNOW HOW MANY ITERATIONS OF THE LOOP TO DO

    Dim CSV_row_number As Int16
    'COUNT THE NUMBER OF ROWS AND SET THE ABOVE INT EQUAL TO THIS
    CSV_row_number = ToLoad.Rows.Count


    Dim j As Int16   
    j = 0
    Do Until j = CSV_row_number - 1


        'THIS MAKES TWO NEW DATAROW OBJECTS
        Dim DB_row As DataRow
        Dim CSV_row As DataRow

        'THIS SETS THE CSV_ROW OBJECT EQUAL TO THE FIRST ROW OF THE CSV DATATABLE
        CSV_row = ToLoad.Rows(j)


        'THIS SETS DB_ROW EQUAL TO A NEW ROW IN THE DATATABLE MADE FROM THE DATABASE
        DB_row = EDITmembers.NewRow()

        'THIS SETS ALL OF THE COLUMNS IN THIS NEW ROW AS EQUAL TO THE CORRESPONDING ROW IN THE CSV DATATABLE
        DB_row("Contact Name") = CSV_row("Contact Name")
        DB_row("Do not mail") = CSV_row("Do not mail")
        DB_row("Membership Type") = CSV_row("Membership Type")
        DB_row("Street Address") = CSV_row("Street Address")
        DB_row("Supplemental Address 1") = CSV_row("Supplemental Address 1")
        DB_row("Supplemental Address 2") = CSV_row("Supplemental Address 2")
        DB_row("City") = CSV_row("City")
        DB_row("Postal Code") = CSV_row("Postal Code")
        DB_row("Email") = CSV_row("Email")
        DB_row("Phone (primary)") = CSV_row("Phone (primary)")


        EDITmembers.Rows.Add(DB_row)

        j = j + 1

    Loop




   'UPDATE THE DATABASE WITH ALL THE CHANGES
    mySqlDataAdapter.Update(DBDataset, "MemberList")
    MessageBox.Show("done!")