【发布时间】: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"))
【问题讨论】: