Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ASPX VB.Net OleDb将参数插入查询_Asp.net_Vb.net_Ms Access_Oledb_Query Parameters - Fatal编程技术网

Asp.net ASPX VB.Net OleDb将参数插入查询

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中,并在添加参数后运行。但当我在

这是我第一次用VB.Net编写aspx页面

我遇到的问题是参数没有进入cmd.Parameters.Add行的查询

我得到的错误是

没有为一个或多个必需参数提供值

在线

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使用@。