簡體   English   中英

ASPX VB.Net OleDb將參數插入查詢

[英]ASPX VB.Net OleDb Insert Parameter into Query

這是我第一次在VB.Net中編寫aspx頁面。

我遇到的問題是該參數沒有進入cmd.Parameters.Add行中的查詢。

我得到的錯誤是

沒有為一個或多個必需參數給出值。

在線上

reader = cmd.ExecuteReader;

我努力了:

  • 如我所示,將PARAMETERS添加到查詢的頂部;
  • 刪除並在參數周圍添加[]
  • OleDbType.Integer更改為OleDbType.SmallIntOleDbType.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字符串中來使其工作。 但我想使此功能適用於頁面上尚未編寫的其他區域。 用戶輸入返回到數據庫中,以便對輸入進行清理。

謝謝大家。

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是您要從SQL Query檢索數據,還是要將數據插入表中。

您使用Dim cmd As 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

如果要將值插入數據庫,請根據給定的示例更改代碼。

希望這會幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM