You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OleDb查询触发Data type mismatch in criteria expression错误的排查求助

OleDb查询触发Data type mismatch in criteria expression错误的排查求助

我现在尝试根据ID进行查询,但一直遇到错误,想知道自己哪里做错了或者该怎么修复。

我的代码如下:

Using conn As New OleDbConnection(My.Settings.marcasConnectionString)

Dim cmd1 As New OleDbCommand("Select * from QATracker where ID='" & intNewPK & "'", conn)

cmd1.Parameters.AddWithValue("ID", TextBox2.Text)

Dim da As New OleDbDataAdapter

da.SelectCommand = cmd1

Dim QATracker As New DataTable

QATracker.Clear()

da.Fill(QATracker)

DataGridView1.DataSource = QATracker

End Using

错误发生在da.fill(QATracker)这一行,具体错误信息是:

System.Data.OleDb.OleDbException HResult=0x80040E07 Message=Data type mismatch in criteria expression.


问题排查与修复思路

你代码里的两个明显问题导致了这个类型不匹配错误:

  1. SQL拼接错误+类型不兼容:你把intNewPK(看起来是整数类型)用单引号括起来当成字符串传入SQL语句,但如果数据库里的ID字段是数值类型(比如int),这种写法会让数据库把数值型的ID和字符串做对比,直接触发类型不匹配。
  2. 参数化查询用错了:你写的SQL语句里根本没用到参数占位符,而是直接拼接了变量,后面添加的cmd1.Parameters.AddWithValue("ID", TextBox2.Text)完全是无效操作,既没起到参数化的作用,还混淆了查询逻辑。

修正后的代码

下面是调整后的正确写法,既解决了类型问题,又规范了参数化查询:

Using conn As New OleDbConnection(My.Settings.marcasConnectionString)
    ' OleDb用?作为参数占位符,注意参数是按顺序匹配的,不是按名称
    Dim cmd1 As New OleDbCommand("Select * from QATracker where ID = ?", conn)
    
    ' 先把输入的文本转成整数,避免类型错误
    Dim targetId As Integer
    If Integer.TryParse(TextBox2.Text, targetId) Then
        ' 指定参数类型,比AddWithValue更安全,避免隐式类型转换问题
        cmd1.Parameters.Add(New OleDbParameter("ID", OleDbType.Integer)).Value = targetId
    Else
        ' 处理用户输入无效的情况
        MessageBox.Show("请输入有效的ID数值")
        Return
    End If
    
    Dim da As New OleDbDataAdapter(cmd1)
    Dim QATracker As New DataTable
    
    ' 新建的DataTable不需要Clear(),直接填充即可
    da.Fill(QATracker)
    
    DataGridView1.DataSource = QATracker
End Using

额外提醒

  • OleDb不支持命名参数,参数是按照你添加的顺序和SQL里的?一一对应的,所以别搞混顺序。
  • 永远不要直接拼接SQL字符串,除了类型问题,还会有SQL注入的安全风险。
  • 用Integer.TryParse处理用户输入,能避免输入非数值时的崩溃,让程序更健壮。

备注:内容来源于stack exchange,提问作者Juan Arias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 13:03:12