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