尝试使用VB中的SQL语句从Access数据库中选择一个整数
Dim cmdAutoTypes As New OleDbCommand
Dim AutoTypesReader As OleDbDataReader
cmdAutoTypes.CommandText = "SELECT * FROM AutoTypes WHERE TypeId = '" & cboTypeIds.Text & "'"
AutoTypesReader = cmdAutoTypes.ExecuteReader
错误消息说:“OleDbException未处理:条件表达式中的数据类型不匹配。”并指向AutoTypesReader = cmdAutoTypes.ExecuteReader行
答案 0 :(得分:1)
这也将避免Sql Injection。
答案 1 :(得分:0)
您不需要查询字符串中的引号。你正在搜索一个数字,而不是一个字符串。
cmdAutoTypes.CommandText = "SELECT * FROM AutoTypes WHERE TypeId = " & cboTypeIds.Text
答案 2 :(得分:0)
您好在访问SQL中,您不能在整数类型周围使用单引号。
所以 命令文本将是..“SELECT * FROM AutoTypes WHERE TypeId =”& cboTypeIds.Text& “和......”
答案 3 :(得分:0)
在Access SQL中,不要引用数字常量。
并测试是否IsNull(cboTypeIds)
。在选择值之前,您无法执行您计划执行的操作。
答案 4 :(得分:0)
在构建SQL查询时不要使用字符串连接,而是使用参数。
Dim cmd As OledbCommand = Nothing
Dim reader as OleDbDataReader = Nothing
Try
Dim query As String = "SELECT * FROM AutoTypes WHERE TypeId = @Id"
cmd = New OledbCommand(query, connection)
//adding parameter implicitly
cmd.Parameters.AddWithValue("@Id", cboTypeIds.Text)
reader = cmd.ExecuteReader()
Catch ex As Exception
Messagebox.Show(ex.Message, MsgBoxStyle.Critical)
End Try
您还可以明确说明参数数据类型。
cmd.Parameters.Add("@Id", OleDbType.Integer).Value = cboTypeIds.Text
希望这有帮助。