#.net #vb.net #visual-studio-2012 #datagridview #odbc
#.net #vb.net #visual-studio-2012 #datagridview #odbc
Вопрос:
** Я ПОЛУЧИЛ ЭТУ ОШИБКУ в Da.Fill (Ds, «tbl_user»): необработанное исключение типа ‘System.AccessViolationException’ произошло в System.Data.dll
Дополнительная информация: попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена. **
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
Комментарии:
1. Есть ли конкретная причина, по которой вы используете ODBC вместо выделенного MySQL ADO.NET провайдер?
2. Какой смысл проверять, открыто или закрыто только что созданное соединение? Как это может быть открыто? Это говорит о том, что вы на самом деле не думаете о выполняемых шагах и, вероятно, просто копируете или воспроизводите фрагменты кода, не понимая, что они делают.
Ответ №1:
В верхней части вашего файла кода добавьте…
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 /