【问题标题】:Cant update MS Access Database from vb.net无法从 vb.net 更新 MS Access 数据库
【发布时间】:2021-06-25 14:00:41
【问题描述】:

我可以通过 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

【问题讨论】:

  • 你做了什么调试?也许 txtRiskid.Text 的内容与数据库中的任何行都不匹配?
  • 在搜索或删除记录时,我使用 txtRiskid.Text 来完成这些功能,当我这样做时它可以工作,但当我尝试更新时就不行。

标签: sql vb.net visual-studio ms-access


【解决方案1】:

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

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

您可以修改该过程以首先为INSERT 提供@ID,最后为UPDATE 提供。或者,您可以将RunQuery 用于INSERT,并为UPDATE 创建一个单独的版本。

【讨论】:

  • 非常感谢,我没想到解决方案这么简单,我花了好几个小时才修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 2013-12-14
相关资源
最近更新 更多