VB.NET数据库读取错误

时间:2018-04-14 10:43:16

标签: database vb.net access

我有这个SQL语句用于从表Roles中检索特定角色(通过列RoleID):

DBBroker.getInstance.read("SELECT * FROM Roles WHERE RoleID='" & role.roleID & "';")

问题是当我的程序运行句子时,我得到了这个错误:

Error obtained

我使用Microsoft Access数据库,其中RoleID被定义为Autonumber,而在我的程序中,它被定义为String。无论如何,我尝试改变类型,但它仍然失败。

我在程序中有太多代码,所以我不能在这里包含它,但我对任何有关程序特定部分的请求都是开放的。

由于

顺便说一下,我之前在另一个类似的数据库上工作,确实完全相同的条款确实有效。

1 个答案:

答案 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}})

希望这有助于丰富您的知识:)