【问题标题】:Missing Select Keyword for Insert Statement缺少插入语句的选择关键字
【发布时间】:2014-11-04 22:46:36
【问题描述】:

我在 VBA 中有以下代码,每当我尝试运行它时,都会收到一条错误消息,提示“缺少选择关键字”。

当我不想阅读任何内容时,我不明白为什么它甚至想要一个 select 关键字,我只想写入数据库:

Private Sub SubmitButton_Click(sender As System.Object, e As System.EventArgs) Handles          SubmitButton.Click
    SubmitButton.Enabled = False

    DeliveryDateTimePicker.CustomFormat = "yyyyMMdd"
    Dim sysdate As Date = Date.Now
    Dim XConnStr As String = "DSN=ivr.dsn; SERVER=ivr.dsn.world; UID=user; PWD=password;"

    Dim SQLString As String = "INSERT INTO sv.ivr_resched ([ORDER_NO], [PHONE_NO], [REQUESTED_DELIVERY_DATE], [RESCHEDULE_REASON], [CREATE_DATE], [CREATE_USERID], [IN_PROGRESS], [STATUS]) VALUES (@ORDER_NO, @PHONE_NO, @REQUESTED_DELIVERY_DATE, @RESCHEDULE_REASON, @CREATE_DATE, @CREATE_USERID, @IN_PROGRESS, @STATUS);"
    Dim objXConn As New OdbcConnection(XConnStr)
    Dim objCommand As New OdbcCommand(SQLString, objXConn)

    objCommand.Parameters.AddWithValue("@ORDER_NO", MSTextBox.Text)
    objCommand.Parameters.AddWithValue("@PHONE_NO", PhoneTextBox.Text)
    objCommand.Parameters.AddWithValue("@REQUESTED_DELIVERY_DATE", DeliveryDateTimePicker.Value)
    objCommand.Parameters.AddWithValue("@RESCHEDULE_REASON", ReasonComboBox.SelectedValue)
    objCommand.Parameters.AddWithValue("@CREATE_DATE", sysdate)
    objCommand.Parameters.AddWithValue("@CREATE_USERID", TransferID)
    objCommand.Parameters.AddWithValue("@IN_PROGRESS", "N")
    objCommand.Parameters.AddWithValue("@STATUS", "newrecrd")
    Try
        Using objXConn
            objXConn.Open()
            objCommand.ExecuteNonQuery()
            objXConn.Close()
        End Using
        MsgBox("Success")
        MSTextBox.Text = ""
        PhoneTextBox.Text = ""
        ReasonComboBox.SelectedValue = ""
        DeliveryDateTimePicker.Value = Date.Now
    Catch ex As Exception
        MessageBox.Show("Error: " & ex.ToString)
    End Try

    SubmitButton.Enabled = True

End Sub

您能提供的任何帮助将不胜感激。

问题已经解决,代码如下:

    Private Sub SubmitButton_Click(sender As System.Object, e As System.EventArgs) Handles SubmitButton.Click
    SubmitButton.Enabled = False
    Dim sysdate As Date = Date.Now
    Dim XConnStr As String = "DSN=ivr.dsn; SERVER=ivr.dsn.world; UID=user; PWD=password;"
    Dim SQLString As String = "INSERT INTO sv.ivr_resched (ORDER_NO, PHONE_NO, REQUESTED_DELIVERY_DATE, RESCHEDULE_REASON, CREATE_DATE, CREATE_USERID, IN_PROGRESS, STATUS) VALUES(?, ?, ?, ?, ?, ?, ?, ?)"
    Dim objXConn As New OdbcConnection(XConnStr)
    Dim objCommand As New OdbcCommand(SQLString, objXConn)

    objCommand.Parameters.Add("ORDER_NO", OdbcType.Char)
    objCommand.Parameters.Item("ORDER_NO").Value = MSTextBox.Text
    objCommand.Parameters.Add("PHONE_NO", OdbcType.Char)
    objCommand.Parameters.Item("PHONE_NO").Value = PhoneTextBox.Text
    objCommand.Parameters.Add("REQUESTED_DELIVERY_DATE", OdbcType.Char)
    objCommand.Parameters.Item("REQUESTED_DELIVERY_DATE").Value = DeliveryDateTimePicker.Value.ToString("yyyMMdd")
    objCommand.Parameters.Add("RESCHEDULE_REASON", OdbcType.Char)
    objCommand.Parameters.Item("RESCHEDULE_REASON").Value = ReasonComboBox.SelectedValue
    objCommand.Parameters.Add("CREATE_DATE", OdbcType.Date)
    objCommand.Parameters.Item("CREATE_DATE").Value = sysdate
    objCommand.Parameters.Add("CREATE_USERID", OdbcType.Char)
    objCommand.Parameters.Item("CREATE_USERID").Value = TransferID
    objCommand.Parameters.Add("IN_PROGRESS", OdbcType.Char)
    objCommand.Parameters.Item("IN_PROGRESS").Value = "N"
    objCommand.Parameters.Add("STATUS", OdbcType.Char)
    objCommand.Parameters.Item("STATUS").Value = "NEWREC"

    Try
        Using objXConn
            objXConn.Open()
            objCommand.ExecuteNonQuery()
            objXConn.Close()
        End Using
        MsgBox("Success")
        MSTextBox.Text = ""
        PhoneTextBox.Text = ""
        ReasonComboBox.SelectedValue = ""
        DeliveryDateTimePicker.Value = Date.Now
    Catch ex As Exception
        MessageBox.Show("Error: " & ex.ToString)
    End Try

    SubmitButton.Enabled = True

End Sub

【问题讨论】:

  • 您的INSERT 声明看起来很可靠。我看到的唯一与我所做的不同的是,您在语句末尾有一个分号。看看删除它是否有帮助。
  • 我确实尝试删除分号,但没有任何影响,不过感谢您的建议。

标签: sql database vb.net oracle visual-studio-2010


【解决方案1】:

在枚举列名时尝试删除括号:

Dim SQLString As String = "INSERT INTO sv.ivr_resched (ORDER_NO, ...

【讨论】:

  • 当我删除括号时,我收到“缺少表达式”错误消息。我相信我的一个列名本身不被接受。 (我相信是状态栏)。
  • @Sean 我怀疑您现在的问题与@ 符号有关。尝试用冒号替换它们。根据我读到的here
  • 通读您发布的线程并尝试了它提到的两种解决方案,使用冒号和不使用“objcommand.parameters.addwithvalue”,这两个仍然给出“缺少选择关键字"
  • @Sean 括号消失了,@ 符号消失了,您又回到了“缺少选择关键字”错误?能否提供更新后的 SQLString?
  • 括号没有消失,因为我的专栏之一(我相信状态之一)使用的名称也是其他内容的关键字。下面是它现在的样子:
【解决方案2】:

尝试在字段名称周围使用双引号而不是括号。查看java.sql.SQLException: ORA-00928: missing SELECT keyword. when inserting record to DB using JDBC的答案。

Dim SQLString As String = "INSERT INTO sv.ivr_resched (""ORDER_NO"", ""PHONE_NO"", ""REQUESTED_DELIVERY_DATE"", ""RESCHEDULE_REASON"", ""CREATE_DATE"", ""CREATE_USERID"", ""IN_PROGRESS"", ""STATUS"") VALUES (@ORDER_NO, @PHONE_NO, @REQUESTED_DELIVERY_DATE, @RESCHEDULE_REASON, @CREATE_DATE, @CREATE_USERID, @IN_PROGRESS, @STATUS);"

【讨论】:

  • 双引号在 VBA 中的工作方式与在 Java 中的工作方式不同。我试过了,但由于我的一个列与保留字同名,我收到了“缺少表达式”错误消息。
猜你喜欢
  • 1970-01-01
  • 2018-01-12
  • 2020-01-27
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多