标准表达式中的数据类型不匹配.-微软喷气数据库引擎



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

Btw,错误显示:

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命令包含一个参数占位符(?),并且在参数集合中分配了正确的参数值。框架代码正确处理这个参数

EDIT如果您的bcode字段是文本字段,则不能以这种方式构建命令。你应该把你的值封装在单引号之间。像这样。

IT WORKS BUT IT IS WRONG - VERY WRONG -
Str = "delete from tblinformation where bcode='" & txtbookcode.Text.Trim & "'"

但这从一开始就是错误的。

  • 第一-如果你的txtbookcode包含一个单引号,整个命令文本无效,得到Syntax Error
  • 第二-字符串连接是不好的,因为你不能信任你的用户。如果它输入一些恶意文本,您可能会面临Sql注入
因此,我建议您使用第一个示例
中所示的参数化查询方法。

相关内容

  • 没有找到相关文章

最新更新