中所示的参数化查询方法。
在下面的代码中,它是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注入