我有这个SQL语句用于从表Roles中检索特定角色(通过列RoleID):
DBBroker.getInstance.read("SELECT * FROM Roles WHERE RoleID='" & role.roleID & "';")
问题是当我的程序运行句子时,我得到了这个错误:
我使用Microsoft Access数据库,其中RoleID被定义为Autonumber,而在我的程序中,它被定义为String。无论如何,我尝试改变类型,但它仍然失败。
我在程序中有太多代码,所以我不能在这里包含它,但我对任何有关程序特定部分的请求都是开放的。
由于
顺便说一下,我之前在另一个类似的数据库上工作,确实完全相同的条款确实有效。
答案 0 :(得分:1)
虽然您解决了问题,但我回答这个问题只是为了描述和帮助将来访问此页面的人
以下是该问题的一行解释:
您为数据库表中的列设置的数据类型与您传递的值的类型不同
例如:简单来说,你有一个单词和一个数字,你可以添加它们吗?我的意思是数学方式?答案是否。
现在假设RoleID
列的数据类型为Integer
,但role.RoleId
的类型为/ {返回String
类型的值,则会有数据 - 类型不匹配,因为一个是integer
,另一个是String
。
现在,通过评论,我看到你已经解决了你的问题。现在,让我解释一下你是如何解决的。
您的SQL查询如下所示:
"SELECT * FROM Roles WHERE RoleID='" & role.roleID & "';"
让我们指出主要的相关部分:
RoleID='" & role.roleID & "'
这里,在用双引号关闭字符串RoleID=
之前,使用'
(单引号)。在sql-queries中,单引号用于声明/给出一个值(类型为< strong> STRING )到(查询的)所需/给定参数。
为了传递Integer
值,您可以在没有'
单引号的情况下传递它:
RoleID=12345
所以,答案很简单:你将一些 String 类型的数据传递给一个期望数据/的列,即使传递的值是intger
类型但是因为你正在使用传递值时'
单引号,引号已将其转换为String
..所以,你必须做的就是(必须做 - 在你的情况下)删除两个单引号({ {1}})
希望这有助于丰富您的知识:)