Access 数据库未通过 Vb.net 中的文本框更新

Access database not updating through the Textboxes in Vb.net

我正在使用 Vb.Net 使用一些文本框更新我的访问数据库。这是我的代码,当在表单中单击 'update' 按钮时不会出现任何错误,但也没有任何反应。由于某种原因,数据库没有得到更新。我不确定我做错了什么。

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!")

您可以将连接字符串直接传递给连接的构造函数。

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