使用VB 2010更新Access数据库

时间:2018-11-30 22:25:02

标签: vb.net-2010

此代码不会引发错误,但是不起作用。

任何帮助将不胜感激!

我是一位迁移到.Net的VB6程序员

我正在使用的其他代码正在添加和删除记录,而不是对其进行更新...

Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim cmdUpdate As New OleDbCommand

    provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="

    myConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                Chr(34) & sAppData & "\Data.mdb" & Chr(34) & _
                ";Persist Security Info=True;Jet OLEDB:Database Password=1"
    myConnection.Open()

    Dim str As String
    str = "update Data set ([1], [2], [3], [4]) values (?, ?, ?,?)"
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    cmd.Parameters.Add(New OleDbParameter("1", CType(TextBox2.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("2", CType(txtDesc.Text, String)))
    cmd.Parameters.Add(New OleDbParameter("3", CType(TextBox3.Text, String)))
    Dim cbState As String = ""

    If CheckBox1.Checked = True Then
        cbState = "1"
    Else
        cbState = "0"
    End If

    cmd.Parameters.Add(New OleDbParameter("4", CType(cbState, String)))
    Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        myConnection.Close()
        Me.Close()
        Exit Sub
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

1 个答案:

答案 0 :(得分:1)

有可能通过您的Me.Close()在try-catch块中,在干净地释放所有资源之前,该表单已关闭。

我将执行以下操作:

  • cmd.ExecuteNonQuery()返回更新的行数。检查该值是否大于0。
  • 如果更新的行数> 0,则仅在try / catch块之外调用Me.Close()

最后,我将替换如下代码:

cmd.Parameters.Add(New OleDbParameter("1", CType(TextBox2.Text, String)))

更方便

cmd.Parameters.AddWithValue("1", TextBox2.Text)

当传递日期和时间等可本地化的内容时,AddWithValue()函数特别有用。