首页 > 解决方案 > 无法从 vb.net 更新 MS Access 数据库

问题描述

我可以通过 vb.net 应用程序在我的 MS 访问中添加、删除和搜索数据,但无法更新。它运行并完成更新查询,但不更新数据库,也不会出现任何错误。我是 VB.net 和 sql 的新手,并且一直遵循指南来获取我目前所拥有的内容。

我用于添加新记录的编码(对我来说很好):

Private Sub Savebtn_Click(sender As Object, e As EventArgs) Handles Addbtn.Click
        Dim Insertquery As String = "Insert into Risk_Register(ID, Risk_Name, Risk_Description, Owner, Control, Probability, Impact, Risk_Level) values (@ID, @Risk_Name, @Risk_Description, @Owner, @Control, @Probability, @Impact, @Risk_Level)"
        Runquery(Insertquery)
        MsgBox("The record has been added successfully to the database.", 0, "Information")
    End If
End Sub

用于更新(不更新)

Private Sub Updatebtn_Click(sender As Object, e As EventArgs) Handles Updatebtn.Click
    Dim Updatequery As String = "Update Risk_Register Set Risk_Name=@Risk_Name, Risk_Description=@Risk_Description, Owner=@Owner, Control=@Control, Probability=@Probability, Impact=@Impact, Risk_Level=@Risk_Level Where ID=@ID"
    Runquery(Updatequery)
    MsgBox("The record has been updated successfully in the database.", 0, "Information")
End Sub

运行查询编码

Public Sub Runquery(ByVal query As String)

    con = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb")
    Dim cmd As New OleDbCommand(query, con)
    cmd.Parameters.AddWithValue("@ID", txtRiskid.Text)
    cmd.Parameters.AddWithValue("@Risk_Name", txtRiskname.Text)
    cmd.Parameters.AddWithValue("@Risk_Description", txtRiskdescription.Text)
    cmd.Parameters.AddWithValue("@Owner", txtOwner.Text)
    cmd.Parameters.AddWithValue("@Control", txtControl.Text)
    cmd.Parameters.AddWithValue("@Probability", txtProbability.Text)
    cmd.Parameters.AddWithValue("@Impact", txtImpact.Text)
    cmd.Parameters.AddWithValue("@Risk_Level", txtRisklevel.Text)
    con.Open()
    cmd.ExecuteNonQuery()
    con.Close()

End Sub

标签: sqlvb.netvisual-studioms-access

解决方案


与 OleDb 提供程序一起使用时,Access 不能按名称识别参数。您必须按照 Access 期望的顺序提供参数值。

在您的UPDATE中,Access@ID期望值最后。但是您的RunQuery过程将其作为第一个参数值提供。

您可以修改该过程以提供@IDfirst 用于 anINSERT和 last 用于 an UPDATE。或者,您可以使用RunQueryforINSERT并为UPDATE.


推荐阅读