尝试更新 Access 数据库时出现 OleDbException
OleDbException when trying to update an Access database
我正在按照我在网上看到的所有说明进行操作,包括 MSDN:https://msdn.microsoft.com/en-us/library/ms233819.aspx
不幸的是,无论我如何更改代码,它总是 return 给我一个错误:"A first chance exception of type 'System.Data.OleDb.OleDbException' occurred in 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
我不明白为什么会这样。
有人遇到过这种情况吗?你是怎么解决的?
谁能帮我解决这个问题?
使用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()
我正在按照我在网上看到的所有说明进行操作,包括 MSDN:https://msdn.microsoft.com/en-us/library/ms233819.aspx
不幸的是,无论我如何更改代码,它总是 return 给我一个错误:"A first chance exception of type 'System.Data.OleDb.OleDbException' occurred in 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
我不明白为什么会这样。
有人遇到过这种情况吗?你是怎么解决的? 谁能帮我解决这个问题?
使用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()