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

通过ID删除Access数据库记录时出现数据类型不匹配错误的原因

解决Access删除记录时的“Data Type mismatch in criteria expression”错误

这个错误的核心原因是数据类型不匹配——你的SQL语句把ID字段当成字符串类型处理了,但实际上Access数据库里的ID字段应该是数值类型(比如整数、长整型),两者类型不兼容就会触发这个报错。

问题出在你的SQL语句里

看这段代码:

Dim Stringc As String = "delete from cmon11 where ID='" & TextBox2.Text & "'"

你用单引号把TextBox2.Text的内容括了起来,这会让Access把这个值解析成字符串,去和数值类型的ID字段做对比,自然就会出现类型不匹配的错误。

两种解决方案

方案1:修正SQL的写法(简单但有风险)

去掉单引号,直接把TextBox的内容作为数值传入:

Dim Stringc As String = "delete from cmon11 where ID=" & TextBox2.Text

⚠️ 注意:这种写法存在SQL注入风险,而且如果用户在TextBox里输入的不是整数,会触发新的转换错误,只适合临时调试,不建议在正式代码里使用。

方案2:使用参数化查询(推荐,安全又彻底解决问题)

参数化查询会自动处理数据类型匹配,同时彻底避免SQL注入,是数据库操作的最佳实践:

Private Sub testdelete()
'此操作会保存至调试用Access数据库!!!
Dim conn As New OleDbConnection
conn = New OleDbConnection
dbprovider = "Provider=Microsoft.ACE.OLEDB.12.0;"
Dim databasePath = "Data Source = FULL YUGIOH ACCESS DATABASE.accdb;"
conn.ConnectionString = dbprovider & databasePath
' 使用参数化的SQL语句
Dim Stringc As String = "delete from cmon11 where ID=@ID"
Dim command As OleDbCommand = New OleDbCommand(Stringc, conn)

' 先验证输入是否为有效整数,避免转换错误
If Integer.TryParse(TextBox2.Text, Dim idValue) Then
    command.Parameters.Add("@ID", OleDbType.Integer).Value = idValue
    Try
        conn.Open()
        command.ExecuteNonQuery()
        MsgBox("删除成功")
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        command.Dispose()
        conn.Close()
        conn.Dispose()
    End Try
Else
    MsgBox("请输入有效的ID数值")
End If
End Sub

这里用Integer.TryParse先验证输入合法性,参数化查询会自动把数值类型的值传递给Access的ID字段,完美解决类型不匹配问题。

额外提醒

  • 先确认Access数据库里cmon11表的ID字段类型:如果是长整型,就把OleDbType.Integer改成OleDbType.BigInt;
  • 永远优先使用参数化查询,不要直接拼接用户输入到SQL语句里,这是防止SQL注入的基本操作。

内容的提问来源于stack exchange,提问作者user11207307

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:10:28