Search code examples
databasevb.netvisual-studioms-accessdatagridview

Inserting data into database with autonumber in VB.net


I'm trying to insert data into a database with an autonumber in MS Access as primary key. I get an error saying "Number of query values and destination fields are not the same. The data types in MS Access are Autonumber (I didn't include it in the INSERT statement), String (@OrderNo), String (@Product), Number (@Qty), and Date (@TDate). Here's the image:

Here's my code:

For Each row As DataGridViewRow In DataGridView1.Rows
        Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Daily Inventory.accdb;"

        Using conn As New OleDbConnection(connString)
            Using cmd As New OleDbCommand("Insert into Table1 Values(@OrderNo, @Product, @Qty, @TDate)", conn)
                cmd.Parameters.AddWithValue("@OrderNo", TxtOrder.Text.ToString)
                cmd.Parameters.AddWithValue("@Product", row.Cells("Product").Value)
                cmd.Parameters.AddWithValue("@Qty", row.Cells("Qty").Value)
                cmd.Parameters.AddWithValue("@TDate", Date.Now.ToString("MM/dd/yyyy"))

                If conn.State = ConnectionState.Open Then
                    conn.Close()
                End If

                conn.Open()
                cmd.ExecuteNonQuery()
                conn.Close()
            End Using
        End Using
    Next

Solution

  • You need to change your sql to "Insert into Table1 (OrderNo,Product,Qty,TDate) Values(@OrderNo, @Product, @Qty, @TDate)".

    The following code works for me.

        DataGridView1.AllowUserToAddRows = False
        For Each row As DataGridViewRow In DataGridView1.Rows
            Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=...;"
            Using conn As New OleDbConnection(connString)
                Using cmd As New OleDbCommand("Insert into Table1 (OrderNo,Product,Qty,TDate) Values(@OrderNo, @Product, @Qty, @TDate)", conn)
                    cmd.Parameters.AddWithValue("@OrderNo", TxtOrder.Text.ToString)
                    cmd.Parameters.AddWithValue("@Product", row.Cells("Product").Value)
                    cmd.Parameters.AddWithValue("@Qty", row.Cells("Qty").Value)
                    cmd.Parameters.AddWithValue("@TDate", Date.Now.ToString("MM/dd/yyyy"))
    
                    If conn.State = ConnectionState.Open Then
                        conn.Close()
                    End If
    
                    conn.Open()
                    cmd.ExecuteNonQuery()
                    conn.Close()
                End Using
            End Using
        Next