Sql 无法从vb.net更新MS Access数据库

Sql 无法从vb.net更新MS Access数据库,sql,vb.net,visual-studio,ms-access,Sql,Vb.net,Visual Studio,Ms Access,我可以通过vb.net应用程序在MS access上添加、删除和搜索数据,但无法更新。它运行并完成更新查询,但不更新数据库,也不会得到任何错误。我是VB.net和sql的新手,一直在遵循一个指南来获得我目前所拥有的 我用于添加新记录的编码(对我来说很好): 用于更新(不更新) 运行查询编码 Public Sub Runquery(ByVal query As String) con = New OleDbConnection("Provider=Microsoft.Jet.O

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

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

用于更新(不更新)

运行查询编码

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

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

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


您可以修改过程,首先为插入提供
@ID
,最后为更新提供
。或者您可以使用
RunQuery
进行
INSERT
并为
UPDATE
创建一个单独的版本

您进行了哪些调试?可能txtRiskid.Text的内容与数据库中的任何行都不匹配?在搜索或删除记录时,我使用txtRiskid.Text来完成这些功能,我这样做时它会工作,但在我尝试更新时它不会工作。非常感谢,我认为解决方案没有那么简单,我花了几个小时试图修复它。
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