简体   繁体   English

vb.net插入数据以访问数据库

[英]vb.net Inserting data to access database

I have the following code to input data into my Access database, but I am getting the following error. 我有以下代码将数据输入到我的Access数据库,但是出现以下错误。

Query input must contain at least one table or query.

What am I doing wrong? 我究竟做错了什么? Here is the section of code that they is mentioning the lines. 这是他们提到这些行的代码部分。

Private Sub EditAddButton_Click(sender As Object, e As EventArgs) Handles EditAddButton.Click

    Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\*******************;Jet OLEDB:Database Password=************;")
    Dim insertsql As String
    Try
        insertsql = "INSERT INTO RepairOrders" & _
        "(ROOtherInfo, ROJobType, ROJobTime, RODelPicDate, RONo)" & _
        "VALUES (@other, @type, @time, @delpic, @jobno) WHERE ROJobNo = @jobno"

        Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(insertsql, conn)

        cmd.Parameters.AddWithValue("@other", AddOtherText.Text)
        cmd.Parameters.AddWithValue("@type", AddTypeCombo.Text)
        cmd.Parameters.AddWithValue("@time", AddTimeCombo.Text)
        cmd.Parameters.AddWithValue("@delpic", AddDatePick.Value.Date.ToString)
        cmd.Parameters.AddWithValue("@jobno", AddJobText.Text)

        conn.Open()
        cmd.ExecuteNonQuery()
        MessageBox.Show("Booking Added!")
        conn.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

End Sub

I have replaced certain information with asterixs' to cover some sensitive information. 我已经用星号替换了某些信息,以涵盖一些敏感信息。

EDIT: 编辑:

Now I am getting a syntax error :( 现在我收到语法错误:(

Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\*********************************;Jet OLEDB:Database Password=***********;")
    Dim insertsql As String
    Try
        insertsql = "UPDATE RepairOrders SET ROOther = @other, SET RONo = @jobno, SET ROJobType = @type, SET ROJobTime = @time, SET RODelPicDate = @delpic WHERE RONo = @jobno"

        Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(insertsql, conn)

        cmd.Parameters.AddWithValue("@other", AddOtherText.Text)
        cmd.Parameters.AddWithValue("@type", AddTypeCombo.Text)
        cmd.Parameters.AddWithValue("@time", AddTimeCombo.Text)
        cmd.Parameters.AddWithValue("@delpic", AddDatePick.Value.Date.ToString)
        cmd.Parameters.AddWithValue("@jobno", AddJobText.Text)

        conn.Open()
        cmd.ExecuteNonQuery()
        MessageBox.Show("Booking Added!")
        conn.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

It looks like you have too many SET statements, and OleDb requires '?' 看来您有太多的SET语句,并且OleDb需要'?' for parameters, and you must take care about the amount of them, and the order they are specified. 对于参数,则必须注意它们的数量以及它们的指定顺序。 This is a bit cleaned up, take a look at OLEDB Parameterized Query for a more thorough example. 这有点清理,请查看OLEDB参数化查询以获取更详尽的示例。

Try
        insertsql = "UPDATE RepairOrders 
                       SET ROOther = ?
                        , RONo = ?
                        ,  ROJobType = ?
                        , SET ROJobTime = ?
                        , SET RODelPicDate = ?
                     WHERE RONo = ?"
    Dim cmd As OleDb.OleDbCommand = New OleDb.OleDbCommand(insertsql, conn)

    cmd.Parameters.AddWithValue("?", AddOtherText.Text)
    cmd.Parameters.AddWithValue("?", AddJobText.Text)
    cmd.Parameters.AddWithValue("?", AddTypeCombo.Text)
    cmd.Parameters.AddWithValue("?", AddTimeCombo.Text)
    cmd.Parameters.AddWithValue("?", AddDatePick.Value.Date.ToString)
    cmd.Parameters.AddWithValue("?", AddJobText.Text)

    conn.Open()
    cmd.ExecuteNonQuery()
    MessageBox.Show("Booking Added!")
    conn.Close()

Catch ex As Exception
    MsgBox(ex.Message)
End Try

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM