"Number of query values and destination fields are not the same" 插入时出错

"Number of query values and destination fields are not the same" error on INSERT

Imports System.Data
Imports System.Data.OleDb

Public Class form7
    Dim inc As Integer
    Dim con As New OleDb.OleDbConnection
    Dim cmd As OleDbCommand
    Dim dbprovider As String
    Dim dbsource As String
    Dim str As String
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim TotalRows As Integer
    Dim ID_Number As Integer

    Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        con = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Bank\db1.accdb ")
        con.Open()
        Dim cmd As New OleDbCommand("SELECT COUNT(*) FROM accountsTable", con)
        Dim totalRows As Long = CInt(cmd.ExecuteScalar())
        cmd.ExecuteNonQuery()
        TextBox1.Text = totalRows + 1000
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Form5.Show()

        dbprovider = "Provider=Microsoft.ACE.OLEDB.12.0; dbsource=Data Source=D:\Bank\db1.accdb"
        MsgBox("Database is now open")

        str = "Insert into accountsTable (Account_Number, First_Name, Midle_Name, Last_Name, Date_of_birth, Occupation, Age, Marital_Status, Address, City, Country, State, Account_Type, Pin_Code, Mobile_Number, Email_ID, Opening_Balance) values ('" &
           TextBox1.Text & "','" &
           TextBox2.Text & "','" &
           TextBox3.Text & "','" &
           TextBox4.Text & "','" &
           DateTimePicker1.Value & "','" &
           TextBox6.Text & "','" &
           TextBox7.Text & "','" &
           TextBox8.Text & "','" &
           TextBox9.Text & "','" &
           ComboBox1.Text & "','" &
           ComboBox2.Text & "','" &
           ComboBox3.Text & "','" &
           ComboBox4.Text & "','" &
           TextBox10.Text & "','" &
           TextBox11.Text & "','" &
           TextBox12.Text & "','" &
           TextBox13.Text & "','" & "')"

        cmd = New OleDb.OleDbCommand(str, con)
        cmd.ExecuteNonQuery()
        MsgBox("Record is inserted")
        con.Close()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
        DateTimePicker1.Value = ""
        TextBox6.Text = ""
        TextBox7.Text = ""
        TextBox8.Text = ""
        TextBox9.Text = ""
        ComboBox1.Text = ""
        ComboBox2.Text = ""
        ComboBox3.Text = ""
        ComboBox4.Text = ""
        TextBox10.Text = ""
        TextBox11.Text = ""
        TextBox12.Text = ""
        TextBox13.Text = ""

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Me.Close()
        Form3.Show()
    End Sub

End Class

错误发生在这里:

cmd = New OleDb.OleDbCommand(str, con)
cmd.ExecuteNonQuery()  ' <-- error here
MsgBox("Record is inserted")
con.Close()

您的列列表中有 17 列,但您在 VALUES 列表的末尾添加了一个额外的(第 18 个)zero-length 字符串值:

TextBox13.Text & "','" & "')"
                   ^^^^^^^^

您确实应该使用 参数化查询,更像这样:

str = 
        "Insert into accountsTable (Account_Number, First_Name, Midle_Name, Last_Name, Date_of_birth, Occupation, Age, Marital_Status, Address, City, Country, State, Account_Type, Pin_Code, Mobile_Number, Email_ID, Opening_Balance) " &
        "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
cmd = New OleDb.OleDbCommand(str, con)
cmd.Parameters.AddWithValue("?", TextBox1.Text)
cmd.Parameters.AddWithValue("?", TextBox2.Text)
cmd.Parameters.AddWithValue("?", TextBox3.Text)
cmd.Parameters.AddWithValue("?", TextBox4.Text)
cmd.Parameters.AddWithValue("?", DateTimePicker1.Value)
cmd.Parameters.AddWithValue("?", TextBox6.Text)
cmd.Parameters.AddWithValue("?", TextBox7.Text)
cmd.Parameters.AddWithValue("?", TextBox8.Text)
cmd.Parameters.AddWithValue("?", TextBox9.Text)
cmd.Parameters.AddWithValue("?", ComboBox1.Text)
cmd.Parameters.AddWithValue("?", ComboBox2.Text)
cmd.Parameters.AddWithValue("?", ComboBox3.Text)
cmd.Parameters.AddWithValue("?", ComboBox4.Text)
cmd.Parameters.AddWithValue("?", TextBox10.Text)
cmd.Parameters.AddWithValue("?", TextBox11.Text)
cmd.Parameters.AddWithValue("?", TextBox12.Text)
cmd.Parameters.AddWithValue("?", TextBox13.Text)
cmd.ExecuteNonQuery()

请注意,如果其中一些 TextBox 控件可能为空,则您必须检查其 .Text 属性的长度,并可能插入空值。例如,对于 "Opening_Balance",您可能需要执行类似

的操作
If TextBox13.Text.Length = 0 Then
    cmd.Parameters.AddWithValue("?", DBNull.Value)
Else
    cmd.Parameters.AddWithValue("?", Convert.ToDecimal(TextBox13.Text))
End If