You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET向Access数据库写入数据时提示CustID列不允许为空错误如何解决

问题排查与解决方案

现有代码的核心问题

  • 语法错误:Insert语句中[InvoiceID]后误写为.,应为分隔字段的,
  • 表与字段逻辑不匹配:你编写的Insert语句目标是写入Items表,后续添加的参数却对应Customers表的CustID、FirstName等字段,二者完全不匹配
  • 两套写入逻辑混用冲突:你把文本框的取值全部赋值给了自行创建的OleDbCommand参数,但是既没有执行这个命令,也没有把取值赋值给CustomersBindingSource新增的行。调用AddNew()后生成的新行所有字段均为空值,自然触发CustID非空约束报错
  • 冗余代码:自行创建的数据库连接、SQL命令逻辑和后续的BindingSource+TableAdapter更新逻辑完全独立,没有任何关联,属于无用代码

修复方案(二选一即可)

方案1:使用BindingSource+TableAdapter(强类型模式,推荐)

删除所有自行编写的OleDbConnection、Insert语句、OleDbCommand相关代码,替换为给新增行赋值的逻辑:

' 新增行并赋值
Dim newRow = CType(CustomersBindingSource.AddNew(), POS_database_latestDataSet.CustomersRow)
newRow.CustID = CustIDTextBox.Text
newRow.FirstName = First_NameTextBox.Text
newRow.LastName = Last_NameTextBox.Text
newRow.Address = AddressTextBox.Text
newRow.PhoneNo = Phone_noTextBox.Text
newRow.Points = PointsTextBox.Text ' 如果Points是数值类型,需转为对应Integer/Decimal类型

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

方案2:使用原生SQL命令执行

删除后续的BindingSource、TableAdapter相关代码,修正SQL语句并执行命令:

Using connection As New OleDbConnection(builder.ConnectionString)
    connection.Open()
    ' 修正Insert语句,目标表改为Customers,字段对应实际列名
    Dim str As String = "Insert into Customers([CustID],[FirstName],[LastName],[Address],[PhoneNo],[Points]) Values (?,?,?,?,?,?)"
    Dim cmd As OleDbCommand = New OleDbCommand(str, connection)
    cmd.Parameters.Add(New OleDbParameter("CustID", CustIDTextBox.Text))
    cmd.Parameters.Add(New OleDbParameter("FirstName", First_NameTextBox.Text))
    cmd.Parameters.Add(New OleDbParameter("LastName", Last_NameTextBox.Text))
    cmd.Parameters.Add(New OleDbParameter("Address", AddressTextBox.Text))
    cmd.Parameters.Add(New OleDbParameter("PhoneNo", Phone_noTextBox.Text))
    ' 若Points为数值类型,需转换为对应类型:CInt(PointsTextBox.Text) / CDec(PointsTextBox.Text)
    cmd.Parameters.Add(New OleDbParameter("Points", PointsTextBox.Text))
    
    ' 执行插入命令
    cmd.ExecuteNonQuery()
End Using

内容的提问来源于stack exchange,提问作者Hamza Asim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:36:04