【发布时间】:2018-07-01 05:23:33
【问题描述】:
这是我第一次在 VB.Net 中编写 aspx 页面。
我遇到的问题是参数没有进入cmd.Parameters.Add 行的查询。
我得到的错误是
没有为一个或多个必需参数指定值。
上线
reader = cmd.ExecuteReader;
我试过了:
- 像我展示的那样在查询顶部添加
PARAMETERS; - 在参数周围删除和添加
[]; - 将
OleDbType.Integer更改为OleDbType.SmallInt或OleDbType.BigInt
我知道查询有效,因为我可以将它放入 MS Access 中,并且在我添加参数后运行。但当我在 Visual Studio 中运行它时不会。
Dim reader As OleDbDataReader
Dim cmd As OleDbCommand
Dim SQL As String = "PARAMETERS [@ID] Long; " &
"SELECT tblField.FieldName, " &
"tblField.FieldCaption, " &
"tblField.FieldMinCharNum, " &
"tblField.FieldMaxCharNum, " &
"tblField.FieldDefault, " &
"tblField.FieldSection, " &
"tblField.FirstQuestion, " &
"tblField.FieldDescription, " &
"tblField.FieldRegEx " &
"FROM tblField " &
"WHERE tblField.FieldID = [@ID];"
cmd = New OleDbCommand(SQL, Connection.Connection)
cmd.Parameters.Add("[@ID]", OleDbType.Integer).Value = ID
reader = cmd.ExecuteReader
我有一个解决方法,只需将参数预插入 SQL 字符串即可。但我想让这项工作适用于尚未编写的页面的其他区域。用户输入返回到数据库的位置,因此输入被清理。
谢谢大家。
【问题讨论】:
-
去掉第一行的SQL代码。您所需要的只是
SELECT声明。还要去掉参数周围的括号。括号用于强制将某些内容解释为标识符,因此您只需将它们放在标识符周围,即使这样,仅当文本不会被解释为标识符时才需要它们,即它是保留字或包含空格或其他特殊字符。 -
数据库中列的数据类型是什么?这决定了您用于参数的数据类型。这不是任意的,也没有必要猜测。如文档所述,
BigInt用于 64 位数字,Integer用于 32 位数字,SmallInt用于 16 位数字。 -
@jmcilhinney 该字段是一个访问自动编号,因此是 32 位的,这就是为什么我首先尝试了 Integer,但为了确保我没有犯错而对其进行了更改。
-
@jmcilhinney
[]围绕着最初不存在的变量,它没有任何区别。我添加了它们以确保。PARAMETERS是在第一次失败后添加的,看看是否可以修复它。 -
您发布的代码显然是错误的。编辑您的问题并发布您认为应该是的代码,我们会处理。
标签: asp.net vb.net ms-access oledb query-parameters