我创建了一个包含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()
并说 数据标准不匹配 。
有人可以给我建议让这个工作吗?
答案 0 :(得分:0)
你有几个问题。首先,至少有一个参数是错误的数据类型。其次,您的参数顺序错误。
Jet和ACE OLE DB提供程序仅部分支持命名参数,因为它们允许您使用名称,以便您的代码可以更清晰,但它们忽略名称并只使用位置。这意味着您需要以与SQL代码中显示的顺序相同的顺序将参数添加到OleDbCommand
。你没有这样做,所以你有一个问题,虽然这不是你的错误信息的直接原因。
即使这些提供程序确实完全支持命名参数,您也不会在SQL代码中使用名称。这意味着无论如何都无法按名称匹配参数,那么您如何认为以错误的顺序添加它们不是问题?
鉴于所有三个参数都指定为相同的数据类型,错误的顺序不会导致您看到的错误消息。如果该数据类型是正确的,您只是发现错误的数据被保存到某些列,这将更糟糕,即看起来工作但不是仅仅失败。您需要确保为要保存的列使用正确的OleDbType
值。如果指定数据库中的ID
列包含32位数字,那么您应该使用OleDbType.Integer
作为相应的参数。我还建议使用VarChar
而不是Char
,除非您的列是特定的固定宽度,Access中的Text
列不太可能,我甚至不确定