问题描述
**我在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/