.net - 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
解决方案
在代码文件的顶部添加...
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/
推荐阅读
- nginx - 仅使用 dnsmasq 和 nginx 重定向某些路径
- mysql - Laradock 无法访问 root@localhost
- python-3.x - 打开后如何阻止.py文件关闭?使用python 3.9?
- sql - 使用 SQL 进行多关键字搜索
- javascript - Angular Karma - 组件未定义
- ios - Xcode 调试器在文件上启用
- python - 当秒数为 0 时,每 15 分钟运行一次 python 程序
- css - 带有宽表和水平滚动条的 Bootstrap4
- postgresql - 在插入原始表时聚合数据
- r - 根据R中的离散标签集标记散点(带滑块)