尝试更新Access数据库时OleDbException

时间:2015-05-30 13:05:18

标签: visual-studio ms-access oledbexception

我按照我在网络上看到的所有说明操作,包括MSDN:https://msdn.microsoft.com/en-us/library/ms233819.aspx

不幸的是,无论我有多少更改代码,它总是给我一个错误:"类型' System.Data.OleDb.OleDbException'的第一次机会异常。发生在System.Data.dll"中,并且未完成更新。 这是我的代码:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim connect3 As New OleDbConnection("Provider=Microsoft.ACE.OleDb.12.0;" & "Data Source =C:\Users\Fernando\Documents\Visual Studio 2012\Projects\Agenda_DP\Agenda_DP\AgendaDP.accdb")
    connect3.Open()
    Dim cmd3 As OleDbCommand = connect3.CreateCommand()
    cmd3.CommandText = "UPDATE Temas SET [Numero] = @p1, [Tema] = @p2, [Observacoes] = @p3 WHERE [Numero] = @1"
    cmd3.Parameters.AddWithValue("@p1", Me.ComboBox1.Text)
    cmd3.Parameters.AddWithValue("@p2", Me.ComboBox2.Text)
    cmd3.Parameters.AddWithValue("@p3", Me.TextBox3.Text)
    cmd3.ExecuteNonQuery()
    connect3.Close()
End Sub

我不明白为什么会这样。

这曾经发生在任何人身上吗?你是怎么解决的? 任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用System.Data.OleDb时,参数纯粹是位置,它们的名称无关紧要。因此,您不能两次使用相同的参数名称,而.Add只能使用一次;你必须.Add两次。

但是,在您的情况下,WHERE子句中有[Numero],因此无需设置其值。你可以做到

cmd3.CommandText = "UPDATE Temas SET [Tema] = ?, [Observacoes] = ? WHERE [Numero] = ?"
cmd3.Parameters.AddWithValue("?", Me.ComboBox2.Text)  ' Tema
cmd3.Parameters.AddWithValue("?", Me.TextBox3.Text)  ' Observacoes
cmd3.Parameters.AddWithValue("?", Me.ComboBox1.Text)  ' Numero
cmd3.ExecuteNonQuery()