我应该在“标准表达式中数据类型不匹配”吗(what should I do in “Data typ

2019-10-16 21:01发布

为什么会出现这个错误? “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,“约翰”)

“DS”是一个数据集

Answer 1:

如果查询数字类型,不要用引号

SELECT Member_ID 
FROM tblMemberInfo
WHERE Member_ID = 17

如果查询字符串类型,请使用引号

SELECT Member_ID 
FROM tblMemberInfo
WHERE Member_ID = 'john'

UPDATE

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注入 (维基百科)。 更专业的方法,但是,使用的参数。 见史蒂夫的回答和DataAdapter的参数(ADO.NET)在MSDN上(尤其是“OleDb的参数占位符”和“OleDb的示例”部分。



Answer 2:

您应该使用参数不发生这类问题。

sqlStr = "Select Member_ID From tblMemberInfo Where Member_ID = ?" 
ds.Clear() 
da = New OleDbDataAdapter(sqlStr, con.ConnectionString) 
da.SelectCommand.Parameters.AddWithValue("@id", Convert.ToInt32(userID))
da.Fill(ds, "john") 
Return ds 


文章来源: what should I do in “Data type mismatch in criteria expression”