database - “列 'CustID' 不允许为空。”尝试写入 Access 数据库 VB.net 时出错

标签 database vb.net ms-access error-handling null

我正在尝试以 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

我不明白我做错了什么。

最佳答案

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

连接和命令都需要处理,因此通过在第一行后添加逗号并删除 Dim 来将命令包含在 Using block 中。

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

TextBoxText 属性是一个 String。您不需要转换类型。

我使用了 With...End With 来避免一点困惑。

OleDb中,参数在sql字符串中出现的顺序必须与它们添加到参数集合中的顺序相匹配。 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

关于database - “列 'CustID' 不允许为空。”尝试写入 Access 数据库 VB.net 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69328457/

相关文章:

php - 如何用 PHP 更新两个 MySQL 表?

VB.net 中的 WPF TreeView

mysql - MS Access 查询计算字段

php - mysql左连接,右表计数包括零

database - 在 heroku DB 和 Amazon S3 上保存图像 : Pros Cons?

vb.net - 如何在VB.net中连接OLEDB和ODBC而不使用多个对象

vb.net - .NET - 非常奇怪的 NullReferenceException?

vb.net - 无法弄清楚语法错误是什么

mysql - Access : Search and Update Query

php - 使用单选按钮控件从 PHP 获取 mysql 数据