VBNet错误与参数化数据库INSERT语句

时间:2015-05-27 13:14:47

标签: vb.net parameters ms-access-2007 oledbconnection oledbcommand

我想在"保存"时尝试将一些信息发送到数据库。单击按钮,但有两种模式,UPDATE和INSERT(用于新条目)。 UPDATE语句工作正常,但INSERT语句总是抛出错误

Public Sub Save_Code()
        Dim myCon = New OleDbConnection(My.Settings.Database_Job_RecordsConnectionString)
        Dim sqrtext As String

        myCon.Open()

        If Globals.Note_Add_Mode = False Then
            Dim sqr
            sqr = New OleDbCommand("UPDATE [Notes] SET [Category] = @Category, [Site] = @Site, [Title] = @Title, [Note] = @Note WHERE [ID] = " & Form1.NOTES_Gridview.CurrentRow.Cells("ID").Value & "", myCon)
            sqr.Parameters.AddWithValue("@Category", Form1.NOTE_Category.Text)
            sqr.Parameters.AddWithValue("@Site", Form1.NOTE_Site.Text)
            sqr.Parameters.AddWithValue("@Title", Form1.NOTE_Title.Text)
            sqr.Parameters.AddWithValue("@Note", Form1.NOTE_Note.Rtf)


            Dim Command = sqr.ExecuteReader


        ElseIf Globals.Note_Add_Mode = True Then

    sqrtext = "INSERT INTO [Notes] VALUES ([Category] = @Category, [Site] = @Site, [Title] = @Title, [Note] = @Note)"

            Dim sqr As OleDbCommand = New OleDbCommand(sqrtext, myCon)

            sqr.Parameters.Add("@Category", OleDbType.VarChar).Value = Form1.NOTE_Category.Text

            sqr.Parameters.Add("@Site", OleDbType.VarChar).Value = Form1.NOTE_Site.Text

            sqr.Parameters.Add("@Title", OleDbType.VarChar).Value = Form1.NOTE_Title.Text

            sqr.Parameters.Add("@Note", OleDbType.VarChar).Value = Form1.NOTE_Note.Rtf


            Dim command = sqr.ExecuteNonQuery() 'ERRORS HERE

        End If

        myCon.Close()

        Form1.NOTES_Gridview.DataSource.clear()

        Globals.Note_Add_Mode = False

        Screen_Starts.Initialise_Screen(6) 'Reset screen and update view

        Exit Sub
    End Sub

我得到的错误是:

  

未处理的类型' System.Data.OleDb.OleDbException'   发生在System.Data.dll

中      

附加信息:查询值和目标字段的数量   不一样。

我还尝试了未命名的参数

sqrtext = "INSERT INTO [Notes] VALUES (?,?,?,?)"

                Dim sqr As OleDbCommand = New OleDbCommand(sqrtext, myCon)

                sqr.Parameters.Add("@p1", OleDbType.VarChar).Value = Form1.NOTE_Category.Text

                sqr.Parameters.Add("@p2", OleDbType.VarChar).Value = Form1.NOTE_Site.Text

                sqr.Parameters.Add("@p3", OleDbType.VarChar).Value = Form1.NOTE_Title.Text

                sqr.Parameters.Add("@p4", OleDbType.VarChar).Value = Form1.NOTE_Note.Rtf


                Dim command = sqr.ExecuteNonQuery() 'ERRORS HERE

但我得到同样的错误。但是,如果我添加 sqr.Parameters.Add("@p1", OleDbType.VarChar).Value = 2 在开头并将@p#向上移动一个,整个例程成功执行。好像数据库中的自动编号字段没有生成数字或想要传递给它的东西。

我之前从未遇到过这个问题?

0 个答案:

没有答案