2

我正在尝试从 VB 形式的文本框中写入我的数据库。但是,当我单击“添加”按钮时,即使我的所有文本框都已填写,也会在“CustomersBindingSource.EndEdit()”行下给出此错误。

Using connection As New OleDbConnection(builder.ConnectionString)

        connection.Open()

        Dim str As String
        str = "Insert into Items([InvoiceID]. [Item],[Cost],[Quantity]) Values (?,?,?,?,?,?)"
        Dim cmd As OleDbCommand = New OleDbCommand(str, connection)
        cmd.Parameters.Add(New OleDbParameter("CustID", CType(CustIDTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("FirstName", CType(First_NameTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("LastName", CType(Last_NameTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Address", CType(AddressTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("PhoneNo", CType(Phone_noTextBox.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Points", CType(PointsTextBox.Text, String)))

        CustomersBindingSource.AddNew()
        CustomersBindingSource.EndEdit()
        CustomersTableAdapter.Update(POS_database_latestDataSet.Customers)

 End Using

我不明白我做错了什么。

4

2 回答 2

3

由于 sql 字符串和参数不匹配,我选择了参数并更改了 sql 字符串。我不得不猜测数据库中的表名和字段名。请检查正确的名称。如果字段是自动编号字段(通常作为主键和 ID 字段找到),则不要为该字段插入值。数据库将为您插入值。

连接和命令都需要处理,因此Using通过在第一行后放置逗号并删除Dim.

在执行命令之前不要打开连接。

a的Text属性TextBox是 a String。您不需要转换类型。

我用 aWith...End With来节省一点混乱。

参数在OleDbsql 字符串中出现的顺序必须与它们添加到参数集合中的顺序相匹配。该Add方法将创建一个新Parameter对象并将其添加到参数集合中。我不得不猜测数据类型。检查您的数据库。

您编写了所有可爱的命令代码,然后您完全忽略了它。执行命令将更新数据库。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim str = "Insert into Customers(FirsName, LastName, Address, PhoneNo, Points) Values (@FirstName, @LastName, @Address, @PhoneNo, @Points);"
    Using connection As New OleDbConnection(builder.ConnectionString),
            cmd As OleDbCommand = New OleDbCommand(str, connection)
        With cmd.Parameters
            .Add("@FirstName", OleDbType.VarWChar).Value = First_NameTextBox.Text
            .Add("@LastName", OleDbType.VarWChar).Value = Last_NameTextBox.Text
            .Add("@Address", OleDbType.VarWChar).Value = AddressTextBox.Text
            .Add("@PhoneNo", OleDbType.VarWChar).Value = Phone_noTextBox.Text
            .Add("@Points", OleDbType.Integer).Value = CInt(PointsTextBox.Text)
        End With
        connection.Open()
        cmd.ExecuteNonQuery()
    End Using
End Sub
于 2021-09-25T18:15:57.673 回答
2

正如错误所述,该列不允许NULL值。而且您没有在其中插入值。您正在插入这些列:

([InvoiceID]. [Item],[Cost],[Quantity])

其中 (1) 看起来像前两列之间的错字, (2) 甚至与您尝试插入的值不相似。

指定要将值插入到的列:

([CustID], [FirstName], [LastName], [Address], [PhoneNo], [Points])
于 2021-09-25T17:27:26.703 回答