【问题标题】:SqlDataAdapter.Update not updatingSqlDataAdapter.Update 未更新
【发布时间】:2015-10-21 19:34:29
【问题描述】:

(我应该说我对 vb.net 相当陌生)

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

据我了解,当我告诉它更新时,它应该用数据表完全替换数据库中的信息......不是吗?

简而言之就是这个问题:

基本上,我有一个数据库(.mdf 文件),其中有一个名为“test”的表。我使用 SqlDataAdapter 使用“测试”制作数据集。我有另一个通过解析 csv 制作的数据表 - 它称为“ToLoad”。我现在想清除“测试”数据表,复制 csv 数据表中的所有条目,然后将其保存到数据库中。

我已经调试了这一切,一切似乎都正常,除了当我使用 SqlDataAdapter.Update 时,我收到一条错误消息,告诉我无法复制主键。这是因为在从数据表中输入新条目之前,并没有完全从数据库中清除旧条目。

我已经检查过测试数据表实际上在代码的早期就被清除了......确实如此。 我已经检查过新的 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"))

【问题讨论】:

    标签: database sqldataadapter


    【解决方案1】:

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

    克雷格

     '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!")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      相关资源
      最近更新 更多