VB.NET 访问 - 尝试读取或写入受保护的内存



我的代码生成此错误时遇到问题:

System.AccessViolationException: 'Try Read or write protected 记忆。这通常表示其他内存已损坏。

这发生在线路My_CONNECTION.Open()

知道如何解决这个问题吗?

我的代码:

vb.net

Dim My_USER As String = Environment.UserName
Dim My_CONNECTION As New OleDbConnection
Dim My_DATABASE As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:Users" & My_USER & "AppDataRoamingMYAPPMYDTB.accdb;Persist Security Info=False;"
Dim My_COMMAND As New OleDbCommand
Dim My_READER As OleDbDataReader
Dim My_COUNT As Integer
'### Open connection ###
My_CONNECTION.ConnectionString = My_DATABASE
My_CONNECTION.Open()
'### SQL ###
With My_COMMAND
.CommandText = "SELECT COUNT(*) FROM MYDTB"
.CommandType = CommandType.Text
.Connection = My_CONNECTION
End With
My_COUNT = My_COMMAND.ExecuteScalar()
'### Close connection ###
My_CONNECTION.Close()

我认为文件位置的连接字符串没有任何问题。我希望您更正一些数据库代码。恐怕会产生同样的错误,但试一试。

公开 .需要释放释放方法,以便它们可以释放非托管对象。连接和命令属于此类别。用。。。即使出现错误,"结束使用"块也会关闭并释放这些对象。

可以将连接字符串直接传递给连接的构造函数。你的方式没有错,它只是缩短了一点代码。同样,命令构造函数可以传递命令文本和连接。

选项严格会告诉你.ExecuteScalar()返回和对象,它不能隐式转换为整数。我们确定它将是一个整数,所以只需使用CInt()

连接应在最后一刻打开并尽快关闭。"结束使用"将关闭连接。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim My_USER As String = Environment.UserName
Dim My_COUNT As Integer
Using My_CONNECTION As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:Users" & My_USER & "AppDataRoamingMYAPPMYDTB.accdb;Persist Security Info=False;")
Using My_COMMAND As New OleDbCommand("SELECT COUNT(*) FROM MYDTB", My_CONNECTION)
My_CONNECTION.Open()
My_COUNT = CInt(My_COMMAND.ExecuteScalar())
End Using
End Using
Label1.Text = My_COUNT.ToString
End Sub

我将提供者从:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:DbTestTest.accdb;Persist Security Info=False;"

自:

"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:DbTestTest.accdb; OLE DB Services=-1"

仅添加:"OLE DB 服务=-1",现在一切正常:-)。

最新更新