我正在尝试以 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 中。
在执行命令之前不要打开连接。
TextBox
的 Text
属性是一个 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/