Asp.net ASPX VB.Net OleDb将参数插入查询
这是我第一次用VB.Net编写aspx页面 我遇到的问题是参数没有进入cmd.Parameters.Add行的查询 我得到的错误是 没有为一个或多个必需参数提供值 在线Asp.net ASPX VB.Net OleDb将参数插入查询,asp.net,vb.net,ms-access,oledb,query-parameters,Asp.net,Vb.net,Ms Access,Oledb,Query Parameters,这是我第一次用VB.Net编写aspx页面 我遇到的问题是参数没有进入cmd.Parameters.Add行的查询 我得到的错误是 没有为一个或多个必需参数提供值 在线 reader = cmd.ExecuteReader; 我试过: 在查询顶部添加参数,如图所示; 删除并在参数周围添加[]; 将OleDbType.Integer更改为OleDbType.SmallInt或OleDbType.BigInt 我知道查询可以工作,因为我可以将其放入MS Access中,并在添加参数后运行。但当我在
reader = cmd.ExecuteReader;
我试过:
在查询顶部添加参数,如图所示;
删除并在参数周围添加[];
将OleDbType.Integer更改为OleDbType.SmallInt或OleDbType.BigInt
我知道查询可以工作,因为我可以将其放入MS Access中,并在添加参数后运行。但当我在VisualStudio中运行它时就不是了
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是从SQL查询中检索数据,还是要将数据插入表中 将Dim cmd用作OleDbCommand意味着将输入值插入数据库,如下面的示例代码所示
query = "INSERT INTO ds.students (ID,NAME,PIC)" & _
"VALUES (@ID,@NAME,@PIC);"
Dim cmd As OracleCommand = New OracleCommand(query, con)
cmd.Parameters.Add("@ID", Convert.ToInt32(TextBox1.Text))
cmd.Parameters.Add("@NAME", Convert.ToString(TextBox2.Text))
cmd.Parameters.Add("@PIC", arrImage)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
你也可以试试这个
Using cn As OracleConnection = New OracleConnection(connectionString)
cn.Open()
Using cmd As OracleCommand = New OracleCommand()
Const sql As String = "Insert into test_table (val1, val2) values (:var1, :var2)"
cmd.Connection = cn
cmd.Parameters.Add(New OracleParameter("var1", TxtField1.Text))
cmd.Parameters.Add(New OracleParameter("var2", TxtField2.Text))
cmd.CommandText = sql
cmd.ExecuteNonQuery()
End Using
End Using
如果要将值插入数据库,请根据给定的示例更改代码
希望这能对您有所帮助。OLEDB不使用@来识别参数。它使用什么?并按参数在SQL中出现的顺序分配参数修改代码以
Dim reader As OleDbDataReader
Dim cmd As OleDbCommand
Dim SQL As String = "SELECT tblField.FieldName, " &
"tblField.FieldCaption, " &
"tblField.FieldMinCharNum, " &
"tblField.FieldMaxCharNum, " &
"tblField.FieldDefault, " &
"tblField.FieldSection, " &
"tblField.FirstQuestion, " &
"tblField.FieldDescription, " &
"tblField.FieldRegEx " &
"FROM tblField " &
"WHERE tblField.FieldID = ?"
cmd = New OleDbCommand(SQL, Connection.Connection)
cmd.Parameters.Add("?", OleDbType.Integer).Value = ID
reader = cmd.ExecuteReader
去掉SQL代码的第一行。您所需要的只是SELECT语句。同时去掉参数周围的括号。方括号用于强制将某些内容解释为标识符,因此您只能将其放在标识符周围,即使如此,只有当文本不会被解释为标识符时,方括号才是必需的,否则,即它是保留字或包含空格或其他特殊字符。数据库中列的数据类型是什么?这决定了参数使用的数据类型。这不是武断的,也没有必要猜测。正如文档中所述,BigInt代表64位数字,Integer代表32位数字,SmallInt代表16位数字。@jmcilhinney该字段是一个访问自动编号,所以为32位,这就是为什么我先尝试Integer,但为了确保我没有犯错误而对其进行了更改。@jmcilhinney the[]在最初不存在的变量周围,这没有什么区别。我添加了它们以确保安全。参数是在它第一次失败后添加的,以查看是否可以修复它。您发布的代码显然是错误的。编辑您的问题并发布您认为应该的代码,我们将对此进行处理。您的第一个示例不会针对Oracle,因为它使用冒号来标识参数。SQL/Server使用@。