Database 在VB.NET中使用OLEDB通过DataGridView更新Access数据库
我已将Access数据库链接到我的程序。它按预期填充DataGridView,以使部分程序正常工作。然而,我试图让DataGridView使用对Access数据库文件所做的任何更改来更新该文件,但在无数次尝试修复代码或寻找替代解决方案之后,我被难住了 有人能看到任何错误或我遗漏的导致代码无法正常运行的东西吗?先谢谢你Database 在VB.NET中使用OLEDB通过DataGridView更新Access数据库,database,vb.net,ms-access,visual-studio-2012,datagridview,Database,Vb.net,Ms Access,Visual Studio 2012,Datagridview,我已将Access数据库链接到我的程序。它按预期填充DataGridView,以使部分程序正常工作。然而,我试图让DataGridView使用对Access数据库文件所做的任何更改来更新该文件,但在无数次尝试修复代码或寻找替代解决方案之后,我被难住了 有人能看到任何错误或我遗漏的导致代码无法正常运行的东西吗?先谢谢你 Imports System.Data.OleDb Public Class frmDatabase Dim con As New OleDbConnection Dim ds
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
只需在代码中添加一个
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将无法生成所需的命令。在这种情况下,您需要手动生成命令
另外请注意,正如下面的评论中所指出的,使用OleDbCommandBuilder时要采取的预防措施是在字段名和表名周围添加CommandBuilder将使用的特殊字符,以避免与表中存在的保留关键字冲突,尤其是对于Access数据库(Access SQL中有大量保留字)
OleDbCommandBuilder
示例应始终包括cb.QuotePrefix=“[”
和cb.QuoteSuffix=“]”
。同意,将您的评论添加到回答中只是将其添加到了代码中,效果很好,啊,我明白了,再安全不过了“嗯?非常感谢你们两位!更新:如果我想通过DataGridView在我的数据库中创建一个新条目,我该怎么做?只需将行添加到您的网格中。不过,最好发布一个新问题,这样您就可以获得一个新的答案再次关注你的问题