Database 在VB.NET中使用OLEDB通过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

我已将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
只需在代码中添加一个

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在我的数据库中创建一个新条目,我该怎么做?只需将行添加到您的网格中。不过,最好发布一个新问题,这样您就可以获得一个新的答案再次关注你的问题