为什么会出现此错误?“ OledbException未处理”“条件表达式中的数据类型不匹配。”
当我查询字符串数据类型时没有问题,但是当我查询整数数据类型时,我总是会遇到此问题。。
我正在使用Microsoft Access 2007
这是我的源代码:
Public Function searchMemberId(ByVal userId As String) As DataSet
sqlStr = "Select Member_ID From tblMemberInfo Where Member_ID = '" & _
Val(userId) & "'"
ds.Clear()
da = New OleDbDataAdapter(sqlStr, con.ConnectionString)
da.Fill(ds, "john")
Return ds
End Function
Member_ID的数据类型是自动编号,错误始终指向da.Fill(ds,“ john”)
“ ds”是一个数据集
如果查询数字类型,请不要使用引号
SELECT Member_ID
FROM tblMemberInfo
WHERE Member_ID = 17
如果查询字符串类型,请使用引号
SELECT Member_ID
FROM tblMemberInfo
WHERE Member_ID = 'john'
更新
Val
功能在这种情况下将无济于事。只需写
sqlStr = "SELECT ... WHERE Member_ID = " & userId
如果ID是一个字符串,则它可能包含单引号,必须在SQL字符串中使用双引号将其转义]
ID = "John's record"
sqlStr = "SELECT ... WHERE Member_ID = '" & ID.Replace("'", "''") & "'"
' ==> "SELECT ... WHERE Member_ID = 'John''s record'"
这也有助于防止SQL injections(维基百科)。但是,更专业的方法是使用参数。请参阅Steve的答案和MSDN上的DataAdapter Parameters (ADO.NET)(尤其是“ OleDb参数占位符”和“ OleDb示例”部分。)>
您应该使用参数,并且不会出现这种类型的问题。
正如Oliver所说,如果您查询数字类型,请不要使用引号