【发布时间】:2016-02-12 22:27:31
【问题描述】:
我正在尝试通过 vb.net 上的 DataGridView 更新访问数据库,而无需使用向导。
但是,我遇到了两个主要问题:
当我尝试保存添加到网格的内容时,一个消息框会显示来自 try catch 的异常,说
"DataTable already belong to this dataSet"。当我能够毫无例外地进行更改时,数据已保存到数据库中,但是当我后来关闭重新打开数据库并
DataGridView时,更改已被撤消。注意数据库已经放在bin/Debug文件夹下。
这是保存事件的代码:
Dim dataAdapter As New OleDbDataAdapter
Dim DataTable As New DataTable
Dim DataSet As New DataSet
Dim Connection As New OleDbConnection
Private Sub btnsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.Click
Try
Connection.Open() ' the following decleration are used to save content to the table.
dataSet.Tables.Add(dataTable)
dataAdapter = New OleDbDataAdapter("SELECT * FROM Students", Connection)
dataAdapter.Fill(dataTable)
Dim newRow As DataRow = dataTable.NewRow
With newRow ' the with statement allows you do repeatedly apply a property to a certain object
.Item("StudentID") = txtStudentID.Text ' these statements add the content of the text boxes to these respective fields in the database
.Item("TeacherID") = txtTeacherID.Text
.Item("StudentFirstName") = txtStudentFirstname.Text
.Item("StudentSurname") = txtStudentSurname.Text
.Item("StudentPassword") = txtStudentPassword.Text
.Item("StudentGroup") = cbxStudentGroup.Text
End With
dataTable.Rows.Add(newRow)
DataSet.Tables.Add(DataTable)
Dim Command As New OleDbCommandBuilder(dataAdapter)
dataAdapter.Update(dataTable) 'updates the table
Connection.Close()
ShowItems() ' displays the table
Catch ex As Exception
MessageBox.Show(ex.Message)
Connection.Close()
End Try
End Sub
如果需要更多详细信息,请询问。 编辑:我发现第一个问题在尝试通过 dataGrid 删除某些内容时也很普遍,这里是代码:
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
Try
dataSet.Tables.Add(dataTable)
Connection.Open()
dataAdapter = New OleDbDataAdapter("SELECT * FROM Students", Connection)
dataAdapter.Fill(dataTable)
dataTable.Rows(0).BeginEdit()
dataTable.Rows(0).Delete()
dataTable.Rows(0).EndEdit()
Dim Commandbuilder As New OleDbCommandBuilder(dataAdapter)
dataAdapter.Update(dataTable)
dgrStudentDatabaseViewer.DataSource = dataTable.DefaultView
Connection.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Connection.Close()
End Try
End Sub
【问题讨论】:
-
如果是 VB.NET,你可能不需要 access-vba 标签。你添加表两次,就像错误说的那样:在connection.open之后一次,然后再一次
-
如果您指的是本节 dataTable.Rows.Add(newRow) DataSet.Tables.Add(DataTable) ,那么我已经删除了“添加表”,但问题仍然存在。跨度>
-
DataSet.Tables.Add(DataTable)2 个地方的完全相同的代码行。如果您摆脱 Try/Catch,它将向您显示导致错误的行 - 可能是该代码的第二个实例。除非您将使用多个 DataTable,否则您实际上并不需要 DataSet -
(重新编辑)您的数据集是一个表单级对象 - 您不能在每次单击按钮时一遍又一遍地向其添加相同的数据表
-
关于项目符号 2,保存已消失,第一个原因是数据库上的“复制到输出目录”设置。有关我写的选项,请参阅以下内容,因为许多人没有意识到这一点。 code.msdn.microsoft.com/Working-with-Copy-to-11fbc251
标签: vb.net winforms ms-access datagridview