我已将Access数据库链接到我的程序。它会按预期填充DataGridView,以便程序的一部分可以工作。但是,我试图让DataGridView对其进行任何更改来更新Access数据库文件,但是经过无数次尝试修复我的代码或寻找替代解决方案之后,我很沮丧。
谁能看到任何错误或我错过的东西,导致代码无法按预期运行?先感谢您。
Imports System.Data.OleDb
Public Class frmDatabase
Dim con As New OleDbConnection
Dim ds As New DataSet
Dim dt As New DataTable
Dim da As New OleDbDataAdapter
Private Sub frmDatabase_Load(sender As Object, e As EventArgs) Handles MyBase.Load
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Joe\Documents\Visual Studio 2012\Projects\school database viewer\school database viewer\dbSchoolDatabase.mdb"
con.Open()
ds.Tables.Add(dt)
da = New OleDbDataAdapter("Select * from tableStudentDetails", con)
da.Fill(dt)
dgvStudentDetails.DataSource = dt.DefaultView
con.Close()
End Sub
Private Sub cmdUpdate_Click(sender As Object, e As EventArgs) Handles cmdUpdate.Click
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Joe\Documents\Visual Studio 2012\Projects\school database viewer\school database viewer\dbSchoolDatabase.mdb"
con.Open()
ds.Tables.Add(dt)
da = New OleDbDataAdapter("Select * from tableStudentDetails", con)
da.Update(dt)
con.Close()
End Sub
End Class
只需在代码中添加一个OleDbCommandBuilder
Private Sub frmDatabase_Load(sender As Object, e As EventArgs) Handles MyBase.Load
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Joe\Documents\Visual Studio 2012\Projects\school database viewer\school database viewer\dbSchoolDatabase.mdb"
con.Open()
ds.Tables.Add(dt)
da = New OleDbDataAdapter("Select * from tableStudentDetails", con)
Dim cb = new OleDbCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
da.Fill(dt)
dgvStudentDetails.DataSource = dt.DefaultView
con.Close()
End Sub
Private Sub cmdUpdate_Click(sender As Object, e As EventArgs) Handles cmdUpdate.Click
da.Update(dt)
End Sub
此类是必需的,因为OleDbDataAdapter本身无法创建更新网格中新行/已删除行或更改行所需的DELETE / UPDATE / INSERT命令。还请记住,如果SELECT命令没有返回表的主键,则OleDbCommandBuilder无法构建所需的命令。在这种情况下,您需要手动构建命令。
还要注意,正如@gordthompson在下面的注释中所指出的那样,对OleDbCommandBuilder采取的预防措施是添加CommandBuilder将在您的字段名称和表名称周围使用的特殊字符,以避免与保留关键字发生冲突(如果存在)在你的桌子上
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句