Visual Basic项目无法更新Microsoft Access数据库

时间:2017-08-02 00:55:41

标签: vb.net ms-access oledb

我创建了一个包含3个值的数据库,ID,UserName和Score。单击保存按钮时,我需要为此数据库创建一个新条目。我的程序需要使用应用程序提供的用户名和分数创建一个新行。

这是我更新现有数据库的代码:

Private Sub ButtonSaveScore_Click(sender As Object, e As EventArgs) Handles ButtonSaveScore.Click

    provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
    dataFile = "F:\Documents\Class Documents\CSC289 - K6A - Programming Capstone Project\Project\Scoreboard.accdb"
    connString = provider & dataFile
    myConnection.ConnectionString = connString


    Using con As New OleDbConnection(connString),
  cmd As New OleDbCommand("UPDATE [Scores] SET [UserName] = ?, [Score] = ? WHERE [ID] = ?", con)

        con.Open()

        cmd.Parameters.Add("@ID", OleDbType.Char).Value = "NEW"
        cmd.Parameters.Add("@UserName", OleDbType.Char).Value = playerName
        cmd.Parameters.Add("@Score", OleDbType.Char).Value = wins


        cmd.ExecuteNonQuery()

    End Using

End Sub

我得到了

  

oledb异常未处理

它突出显示cmd.ExecuteNonQuery()并说 数据标准不匹配

有人可以给我建议让这个工作吗?

1 个答案:

答案 0 :(得分:0)

你有几个问题。首先,至少有一个参数是错误的数据类型。其次,您的参数顺序错误。

Jet和ACE OLE DB提供程序仅部分支持命名参数,因为它们允许您使用名称,以便您的代码可以更清晰,但它们忽略名称并只使用位置。这意味着您需要以与SQL代码中显示的顺序相同的顺序将参数添加到OleDbCommand。你没有这样做,所以你有一个问题,虽然这不是你的错误信息的直接原因。

即使这些提供程序确实完全支持命名参数,您也不会在SQL代码中使用名称。这意味着无论如何都无法按名称匹配参数,那么您如何认为以错误的顺序添加它们不是问题?

鉴于所有三个参数都指定为相同的数据类型,错误的顺序不会导致您看到的错误消息。如果该数据类型是正确的,您只是发现错误的数据被保存到某些列,这将更糟糕,即看起来工作但不是仅仅失败。您需要确保为要保存的列使用正确的OleDbType值。如果指定数据库中的ID列包含32位数字,那么您应该使用OleDbType.Integer作为相应的参数。我还建议使用VarChar而不是Char,除非您的列是特定的固定宽度,Access中的Text列不太可能,我甚至不确定