System.Data.dll

问题描述

**我在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

解决方法

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

Imports MySql.Data.MySqlClient

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

将数据库对象保留在使用它们的方法本地。数据库对象需要关闭和处置。 Using...End 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/