条件表达式中的数据类型不匹配。 -Microsoft JET DATABASE ENGINE

时间:2013-04-15 07:22:10

标签: 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
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

1 个答案:

答案 0 :(得分:1)

数据库中的字段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包含单引号,则全部 命令文本无效,您将获得Syntax Error
  • 第二 - 字符串连接很糟糕,因为您无法信任您的用户。 如果它输入了某些恶意文本,您可能会遇到Sql Injection problem

所以,我真的建议你使用第一个例子中说明的参数化查询方法