首页 > 解决方案 > System.Data.dll 中出现“System.AccessViolationException”类型的未处理异常

问题描述

**我在 Da.Fill(Ds, "tbl_user") 遇到了这个错误:System.Data.dll 中发生了“System.AccessViolationException”类型的未处理异常

附加信息:试图读取或写入受保护的内存。这通常表明其他内存已损坏。**

Public Conn As OdbcConnection
    Public Da As OdbcDataAdapter
    Public Ds As DataSet
    Public Dr As OdbcDataReader
    Public CMD As OdbcCommand

    Public MyDB As String


    Public Sub Connection()
        MyDB = "Driver={Mysql ODBC 5.1 driver};database=uas;server=localhost;uid=root"
        Conn = New OdbcConnection(MyDB)
        'jika koneksinya tertutup maka akan di open
        If Conn.State = ConnectionState.Closed Then Conn.Open()
    End Sub
 Private Sub FormMasterAdmin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Call closeField()
        Call Connection()
        Da = New OdbcDataAdapter("Select username,fullname,level From tbl_user", Conn)
        Ds = New DataSet
        Da.Fill(Ds, "tbl_user")
        DataGridView1.DataSource = Ds.Tables("tbl_user")
        DataGridView1.ReadOnly = True
    End Sub

标签: .netvb.netvisual-studio-2012datagridviewodbc

解决方案


在代码文件的顶部添加...

Imports MySql.Data.MySqlClient

Call关键字仅在特殊情况下使用。通常没有必要。

将您的数据库对象保持在使用它们的方法的本地。数据库对象需要关闭和处置。Using...End Using块会为您解决这个问题。在此代码中,连接和命令都包含在Using块中。注意 Using 第一行末尾的逗号。

Private MyDB As String = "Driver={Mysql ODBC 5.1 driver};database=uas;server=localhost;uid=root"

Private Sub FormMasterAdmin_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim dt As New DataTable
    Using Conn As New MySqlConnection(MyDB),
            cmd As New MySqlCommand("Select username, fullname, level From tbl_user", Conn)
        Conn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    DataGridView1.DataSource = dt
    DataGridView1.ReadOnly = True
End Sub

您必须将连接字符串更正为 MySql 提供程序所需的格式。见https://www.connectionstrings.com/mysql-connector-net-mysqlconnection/


推荐阅读