Database SqlDataAdapter.Update未更新
我应该说我对vb.net还很陌生 我在覆盖数据库中的条目时遇到问题。我认为问题在于SqlDataAdapter.Update没有使用我创建的新数据表信息正确覆盖数据库 据我所知,当我告诉它更新时,它应该用datatable完全替换数据库中的信息。。。没有 简而言之,问题在于: 基本上,我有一个database.mdf文件,其中有一个名为“test”的表。我已经使用SqlDataAdapter使用“test”创建了一个数据集。我还有另一个数据表,是通过csv解析生成的,叫做“ToLoad”。我现在想清除“测试”数据表,从csv数据表中复制所有条目,然后将其保存到数据库中 我已经调试了所有这些,看起来一切正常,除了使用SqlDataAdapter.Update时,我收到一个错误,告诉我不能复制主键。这是因为在从datatable中输入新条目之前,旧条目不会完全从数据库中清除 我已经检查了测试数据表是否在代码的早期被清除。。。的确如此。 我已检查新的csv条目是否被复制到“测试”数据表中。。。他们是 如果您能在这方面给予任何帮助,我们将不胜感激 谢谢 克雷格Database SqlDataAdapter.Update未更新,database,sqldataadapter,Database,Sqldataadapter,我应该说我对vb.net还很陌生 我在覆盖数据库中的条目时遇到问题。我认为问题在于SqlDataAdapter.Update没有使用我创建的新数据表信息正确覆盖数据库 据我所知,当我告诉它更新时,它应该用datatable完全替换数据库中的信息。。。没有 简而言之,问题在于: 基本上,我有一个database.mdf文件,其中有一个名为“test”的表。我已经使用SqlDataAdapter使用“test”创建了一个数据集。我还有另一个数据表,是通过csv解析生成的,叫做“ToLoad”。我现在
经过一段时间的谷歌搜索和一些尝试和错误之后,我自己设法解决了这个问题。发布我的代码以防对其他人有用 克雷格
'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!")