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 中的文本框更新的主要内容,如果未能解决你的问题,请参考以下文章

从 vb.net 将值插入 Access db

如何按 MS Access 的特定月份汇总特定列数据并进入 vb.net 中的文本框

Access 数据库中的自动完成文本框

WIN7系统 VB.NET2008 连接数据库ACCESS2007 提示未找到提供程序 该程序未正确安装

VB.NET连接access数据库文件时提示“无效的授权说明”

VB.NET本地化,检测未翻译文本