Vb.net 条件表达式中的数据类型不匹配-Microsoft JET数据库引擎

Vb.net 条件表达式中的数据类型不匹配-Microsoft JET数据库引擎,vb.net,oledb,vb.net-2010,oledbconnection,Vb.net,Oledb,Vb.net 2010,Oledbconnection,在下面的代码中,它是在OLEDB连接中使用的“删除”按钮。 我的数据库表名是tblinformation 顺便说一句,错误显示: Data type mismatch in criteria expression. `-Microsoft JET DATABASE ENGINE`, and it was in a form of msgbox.. Imports System.Data.OleDb Imports System.String Public Class frmbookinfo

在下面的代码中,它是在
OLEDB
连接中使用的“删除”按钮。 我的数据库表名是
tblinformation

顺便说一句,错误显示:

Data type mismatch in criteria expression. `-Microsoft JET DATABASE ENGINE`, and it was in a form of msgbox..



Imports System.Data.OleDb
Imports System.String
Public Class frmbookinfo
Dim cnn As New OleDb.OleDbConnection


Dim Str As String
    If CheckId() = False Then
        MsgBox("Id : Integer Value Required!!!")
        Exit Sub
    End If
    Try
        Str = "delete from tblinformation where bcode="
        Str += txtbookcode.Text.Trim
        Con.Open()
        Cmd = New OleDbCommand(Str, Con)
        Cmd.ExecuteNonQuery()
        Dst.clear()
        Dad = New OleDbDataAdapter("SELECT * FROM tblinformation ORDER BY bcode", Con)
        Dad.Fill(Dst, "tblinformation")
        MsgBox("Record deleted successfully...")
        If CurrentRow > 0 Then
            CurrentRow -= 1
            ShowData(CurrentRow)
        End If
        Con.Close()
    Catch ex As Exception
        MessageBox.Show("Could Not delete Record!!!")
        MsgBox(ex.Message & " -  " & ex.Source)
        Con.Close()
    End Try

数据库中的字段
bcode
可能是文本类型。
您使用字符串连接来构建命令文本,如果您不能正确处理值,这将无法帮助您

而是使用参数化查询,并将任务留给正确地将参数解析为数据库框架代码

    Str = "delete from tblinformation where bcode=?"
    Con.Open()
    Cmd = New OleDbCommand(Str, Con)
    Cmd.Parameters.AddWithValue("@p1", txtbookcode.Text.Trim)
    Cmd.ExecuteNonQuery()
现在,sql命令包含一个参数占位符(?),并且在参数集合中指定了正确的参数值。框架代码正确处理此参数

编辑如果
bcode
字段是文本字段,则不能以这种方式生成命令。您应该在单引号之间封装您的值。像这样的

IT WORKS BUT IT IS WRONG - VERY WRONG -
Str = "delete from tblinformation where bcode='" & txtbookcode.Text.Trim & "'"
但这从一开始就是错误的。
  • 首先-如果txtbookcode包含单个报价,则整个 命令文本变为无效,并出现
    语法错误
  • 第二个字符串连接是不好的,因为你不能信任你的用户。 如果它输入一些恶意文本,您可能会面临

因此,我建议您使用第一个示例中所示的参数化查询方法

数据库中的字段
bcode
可能是文本类型。
您使用字符串连接来构建命令文本,如果您不能正确处理值,这将无法帮助您

而是使用参数化查询,并将任务留给正确地将参数解析为数据库框架代码

    Str = "delete from tblinformation where bcode=?"
    Con.Open()
    Cmd = New OleDbCommand(Str, Con)
    Cmd.Parameters.AddWithValue("@p1", txtbookcode.Text.Trim)
    Cmd.ExecuteNonQuery()
现在,sql命令包含一个参数占位符(?),并且在参数集合中指定了正确的参数值。框架代码正确处理此参数

编辑如果
bcode
字段是文本字段,则不能以这种方式生成命令。您应该在单引号之间封装您的值。像这样的

IT WORKS BUT IT IS WRONG - VERY WRONG -
Str = "delete from tblinformation where bcode='" & txtbookcode.Text.Trim & "'"
但这从一开始就是错误的。
  • 首先-如果txtbookcode包含单个报价,则整个 命令文本变为无效,并出现
    语法错误
  • 第二个字符串连接是不好的,因为你不能信任你的用户。 如果它输入一些恶意文本,您可能会面临

因此,我建议您使用第一个示例中说明的参数化查询方法

您应该检查数据库中列
bcode
的数据类型。我想它是文本类型,您应该检查数据库中
bcode
列的数据类型。我想它是文本类型是的,它是文本,所以我必须使用什么类型?数字?如果数据库字段是文本,则不能以这种方式连接字符串。看到更新的答案和大警告谢谢你,史蒂夫先生,你真的帮了我很多!事实上,这是你第二次帮助我……:)这是正确的代码,值现在是数据库中的一个数字。我很高兴能为您提供帮助,看到您是这个网站的新用户,我建议您阅读关于如何使用的常见问题解答,或者是的,它是一个文本,那么我必须使用哪种类型?数字?如果数据库字段是文本,则不能以这种方式连接字符串。看到更新的答案和大警告谢谢你,史蒂夫先生,你真的帮了我很多!事实上,这是你第二次帮助我……:)下面是正确的代码,值现在是数据库中的一个数字。我很高兴能为您提供帮助,看到您是本网站的新用户,我建议您阅读有关如何或