Access 数据库未通过 Vb.net 中的文本框更新
Posted
技术标签:
【中文标题】Access 数据库未通过 Vb.net 中的文本框更新【英文标题】:Access database not updating through the Textboxes in Vb.net 【发布时间】:2021-11-23 22:03:10 【问题描述】:我正在使用 Vb.Net 使用一些文本框来更新我的访问数据库。这是我在表单中单击“更新”按钮时没有给出任何错误的代码,但也没有任何反应。由于某种原因,数据库没有得到更新。我不确定我做错了什么。
Dim pro As String
Dim connstring As String
Dim command As String
Dim myconnection As OleDbConnection = New OleDbConnection
pro = "Provider =Microsoft.ACE.OLEDB.12.0; data source= C:\Users\Hamza\Documents\POS system1.accdb"
connstring = pro
myconnection.ConnectionString = connstring
myconnection.Open()
Dim Str = "Update Customers SET FirstName=?, LastName=?, Address=?, PhoneNo=?, Points=? WHERE CustID=?"
Dim cmd = New OleDbCommand(Str, myconnection)
cmd.Parameters.AddWithValue("@CustID", CustIDTextBox)
cmd.Parameters.AddWithValue("@FirstName", First_NameTextBox)
cmd.Parameters.AddWithValue("@LastName", Last_NameTextBox)
cmd.Parameters.AddWithValue("@Address", AddressTextBox)
cmd.Parameters.AddWithValue("@PhoneNo", Phone_noTextBox)
cmd.Parameters.AddWithValue("@Points", PointsTextBox)
cmd.ExecuteNonQuery()
MsgBox("Updated!")
【问题讨论】:
移动带有参数@CustID 的行作为最后添加的行。在 OleDb 中,参数是位置的 这些参数值也是文本框的名称吗?如果是,您还有另一个错误,因为 TextBox 的值在 Text 属性中 @Steve 谢谢。但是你说的第二点是什么意思?我必须先将文本框转换为文本吗? PointsTextBox.Text、CustIDTextBox.Text 等。您需要在 AddWithValue 中传递值而不是文本框本身。还要记住 AddWithValue 很难使用。带小数的数值,DateTime 值存在本地化问题。始终使用 Add 传递数据库列所期望的类型 【参考方案1】:您可以将连接字符串直接传递给连接的构造函数。
OleDb(与 Access 一起使用)不关心参数的名称。它们在 sql 字符串中出现的顺序必须与它们添加到参数集合中的顺序相匹配。因此,将 CustID 移到要添加的参数的末尾,因为它是 sql 字符串中的最后一件事。
我很高兴看到您正在使用参数。 Add
方法使您有更好的机会将正确的数据类型发送到数据库。我不确定 TextBox 变量是否是需要 Text
属性或您设置的变量的文本框。我不得不猜测数据类型。检查您的数据库中的实际类型。
需要处理连接和命令。 Using...End Using
块为我们完成了这项工作。它还会关闭连接。你根本没有关闭你的连接。
在执行之前不要打开连接...
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Str = "Update Customers SET FirstName=?, LastName=?, Address=?, PhoneNo=?, Points=? WHERE CustID=?"
Dim pro = "Provider =Microsoft.ACE.OLEDB.12.0; data source= C:\Users\Hamza\Documents\POS system1.accdb"
Using myconnection As New OleDbConnection(pro),
cmd As New OleDbCommand(Str, myconnection)
cmd.Parameters.Add("@FirstName", OleDbType.VarChar).Value = First_NameTextBox.Text
cmd.Parameters.Add("@LastName", OleDbType.VarChar).Value = Last_NameTextBox.Text
cmd.Parameters.Add("@Address", OleDbType.VarChar).Value = AddressTextBox.Text
cmd.Parameters.Add("@PhoneNo", OleDbType.VarChar).Value = Phone_noTextBox.Text
cmd.Parameters.Add("@Points", OleDbType.Integer).Value = CInt(PointsTextBox.Text)
cmd.Parameters.Add("@CustID", OleDbType.Integer).Value = CInt(CustIDTextBox.Text)
myconnection.Open()
cmd.ExecuteNonQuery()
End Using
MsgBox("Updated!")
End Sub
【讨论】:
我很高兴它有帮助。如果它解决了您的问题,请点击答案左侧的复选标记(勾号)接受我的回答。这将有助于未来的读者,为我赢得一些代表并为您赢得两分。以上是关于Access 数据库未通过 Vb.net 中的文本框更新的主要内容,如果未能解决你的问题,请参考以下文章
如何按 MS Access 的特定月份汇总特定列数据并进入 vb.net 中的文本框
WIN7系统 VB.NET2008 连接数据库ACCESS2007 提示未找到提供程序 该程序未正确安装