在 VB.NET 中使用 OLEDB 通过 DataGridView 更新 Access 数据库
Updating an Access Database via a DataGridView Using OLEDB in VB.NET
我已将 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
此 class 是必需的,因为 OleDbDataAdapter 本身无法为更新 new/deleted 或更改网格中的行所需的 DELETE/UPDATE/INSERT 创建命令。另请记住,如果 SELECT 命令不是 return 您的 table 的主键,OleDbCommandBuilder 将无法构建所需的命令。在这种情况下,您需要自己手动构建命令。
另请注意,正如 @gordthompson 在其下方评论中指出的那样,对 OleDbCommandBuilder 采取的预防措施是添加 CommandBuilder 将在您的字段名称周围使用的特殊字符,并且 table 的名称以避免与保留关键字发生冲突(如果您的 table
中存在任何关键字)
我已将 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
此 class 是必需的,因为 OleDbDataAdapter 本身无法为更新 new/deleted 或更改网格中的行所需的 DELETE/UPDATE/INSERT 创建命令。另请记住,如果 SELECT 命令不是 return 您的 table 的主键,OleDbCommandBuilder 将无法构建所需的命令。在这种情况下,您需要自己手动构建命令。
另请注意,正如 @gordthompson 在其下方评论中指出的那样,对 OleDbCommandBuilder 采取的预防措施是添加 CommandBuilder 将在您的字段名称周围使用的特殊字符,并且 table 的名称以避免与保留关键字发生冲突(如果您的 table
中存在任何关键字)