Создание подключения к MySQL и Access из VB.Net Ключевые слова: VB.Net, Net, MySQL, Access, ODBC, OLEDB
Этот цикл статей призван облегчить начало работы с базами данных (БД) и XML из VB.NET для новичков. Статьи предпологают, что у Вас уже установлены VS.Net и БД Access и вы умеете с ними работать, т.к. с этими программными пакетами проблем при установке не возникает, а работа проста, логична и понятна.
В статье рассмотрены 2 базы данных и 2 различных способа соединения – MySQL по ODBC и Access по OLEDB.
Выбор этих БД обусловлен широким распространением. К тому-же у MySQL есть еще 2 преимущества – бесплатность и работа на нескольких ОС (Windows и Linux).
Устанавливаем БД MySQL
MySQL это бесплатная БД, использующаяся на многих хостингах и работающая на многих операционных системах. Для установки на ОС Windows и доступа по ODBC нам понадобятся установочный пакет MySQL и ODBC драйвер для MySQL. Все это имеется на сайте http://www.mysql.com
На момент создания статьи:
Дистрибутив MySQL - http://dev.mysql.com/downloads/mysql/5.0.html
ODBC драйвер для MySQL - http://dev.mysql.com/downloads/connector/odbc/3.51.html
Если скачивать MySQL полностью Вас не очень устраивает, то можно обойтись и урезанной, но вполне работоспособной версией с сайта Денвер http://www.denwer.ru/. http://www.denwer.ru/dis/MySQL5.
Она урезана до размера 2.1 Мб. Однако я рекомендую скачать базовую версию Денвера - http://www.denwer.ru/base.html, которая включает в себя не только MySQL, но и:
Apache, SSI, mod_rewrite, mod_php, PHP4 с поддержкой GD и MySQL, MySQL с поддержкой транзакций (mysqld-max), phpMyAdmin — система управления MySQL через Web-интерфейс и прочие вкусности. И размер её очень маленький. Пакет пригодиться Вам в дальнейшем.
Ссылка на Денвер - http://www.denwer.ru/dis/Base. На этой странице так-же есть FAQ по установке пакета.
Создание подключения
Для начала немного теории:
Есть такая идея - предоставить программисту универсальный интерфейс для обращения к базам данных (и не только к ним). С другой стороны, каждый производитель базы данных который хочет предоставить доступ к своей базе, пишет ODBC driver. Получается, что если ты как программист умеешь работать с ODBC, то не важно с какой базой ты работаешь, главное что б был установлен ODBC driver к той базе.
OLEDB – продолжение этой идеи. Это универсальный компонент для работы с различными источниками данных. Он позволяет "унифицировать" объектный интерфейс, то есть создать "прокладку" между БД и программистом, т.е. программисту так-же уже не важно знать специфику подключения к тому или иному источнику данных. Но это вовсе не ODBC. LEDB это высокоскоростная COM-технология MS доступа к базам данных.
Что из них медленней, что быстрее Вы уже решите сами в последствии.
Вот примеры строк соединений для разных технологий:
ODBC:
DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=BDn; UID=root; PASSWORD=; OPTION=3;
OLEDB:
Provider=Microsoft.Jet.OLEDB.4.0; User ID=; Password=; Data Source=c:\odbc.mdb;Mode=ReadWrite|Share Deny None;
Для начала создадим новый проект, добавим в него модуль и нарисуем формочку для наших тестов. Формочка будет у нас такого вида:
1) Разместим на форме элемент управления закладками – TabControl, сделаем два слоя: Соединение с MySQL и Соединение с Access. На слои поместим Label–ы, TextBox-ы и Button-ы:
Слой "Соединение с MySQL":
Элемент | Свойство Name | Свойство Text | Label | lblDriverToMySQL | Драйвер (поставщик БД) | Label | lblIPToMySQL | Адрес сервера | Label | lblBDToMySQL | Имя базы данных | Label | lblUIDToMySQL | Пользователь | Label | lblPassToMySQL | Пароль | Label | lblAccessToMySQL | Режим доступа | TextBox | txtboxDriverToMySQL | {MySQL ODBC 3.51 Driver} | TextBox | txtboxIPToMySQL | localhost | TextBox | txtboxBDToMySQL | BDn | TextBox | txtboxUserToMySQL | root | TextBox | txtboxPassToMySQL | | TextBox | txtboxAccessToMySQL | 3 | Button | btnConnectionSTRingToMySQL | Создать строку соединения | Button | btnTestToMySQL | Тест |
Слой "Соединение с Access":
Элемент | Свойство Name | Свойство Text | Label | lblProviderToAccess | Провайдер (поставщик БД) | Label | lblPathToAccess | Путь к файлу | Label | lblUserToAccess | Пользователь | Label | lblPassToAccess | Пароль | Label | blAccessToAccess | Режим доступа | TextBox | txtboxProviderToAccess | Microsoft.Jet.OLEDB.4.0 | TextBox | txtboxPathToAccess | c:\odbc.mdb (Этот файлик предлагается создать самостоятельно) | TextBox | txtboxUserToAccess | | TextBox | txtboxPassToAccess | | TextBox | txtboxAccessToAccess | ReadWrite|Share Deny None | Button | btnConnectionSTRingToAccess | Создать строку соединения | Button | btnTestToAccess | Тест |
2) Создадим вне слоёв Label – "Строка соединения" и TextBox:
Элемент | Свойство Name | Свойство Text | Label | lblConnectionSTRing | Строка соединения | TextBox | txtboxConnectionSTRing | |
В модуле напишем (далее с комментариями):
'Подключаем классы System, ODBC, OLEDB
Imports System.Data.OleDb
Imports System.Data.Odbc
Imports System
Module AConnectionsModule
'Ole
Public AccessConnection As OleDbConnection
'Odbc
Public MySQLConnection As OdbcConnection
Public Function StringConnectToBDAccess(ByVal tProvider As String, ByVal tUserID As String,
ByVal tPassword As String, ByVal tDataSource As String,
ByVal tMode As String) As String
'Формируем строку соединения с Access
StringConnectToBDAccess = "Provider=" & tProvider & ";" & _
"User ID=" & tUserID & ";" & _
"Password=" & tPassword & ";" & _
"Data Source=" & tDataSource & ";" & _
"Mode=" & tMode & ";"
End Function
Public Function ConnectToBDAccess(ByVal MyConnectionString As String,
ByRef StatusConnection As String) As Boolean
'Обработка исключения
Try
'Создадим
AccessConnection = New OleDbConnection(MyConnectionString)
'Открываем БД
AccessConnection.Open()
'Статус соединения
StatusConnection = "Connection State::" & MySQLConnection.State.ToString
'Возврат положительного результата
ConnectToBDAccess = True
'Исключение OLEDB
Catch MyOdbcException As OleDbException
'Статус соединения (сообщение об ошибке)
StatusConnection = MyOdbcException.ToString
'Возврат отрицательного результата
ConnectToBDAccess = False
'Исключение по ошибок программы
Catch MyException As Exception
'Статус соединения (сообщение об ошибке)
StatusConnection = MyException.ToString
'Возврат отрицательного результата
ConnectToBDAccess = False
End Try
End Function
Public Function StringConnectToBDMySQL(ByVal tDriver As String, ByVal tServer As String,
ByVal tDB As String, ByVal tUID As String, ByVal tPass As String,
ByVal tOpt As String) As String
'Формируем строку соединения с сервером MySQL (в примере MyODBC 3.51)
StringConnectToBDMySQL = "DRIVER=" & tDriver & ";" & _
"SERVER=" & tServer & ";" & _
"DATABASE=" & tDB & ";" & _
"UID=" & tUID & ";" & _
"PASSWORD=" & tPass & ";" & _
"OPTION=" & tOpt & ";"
End Function
Public Function ConnectToBDMySQL(ByVal MyConnectionString As String,
ByRef StatusConnection As String) As Boolean
'Обработка исключения
Try
'Создадим
MySQLConnection = New OdbcConnection(MyConnectionString)
'Открываем БД
MySQLConnection.Open()
'Статус соединения
StatusConnection = "Connection State::" & MySQLConnection.State.ToString
'Возврат положительного результата
ConnectToBDMySQL = True
'Исключение ODBC
Catch MyOdbcException As OdbcException
'Статус соединения (сообщение об ошибке)
StatusConnection = MyOdbcException.ToString
'Возврат отрицательного результата
ConnectToBDMySQL = False
'Исключение по ошибок программы
Catch MyException As Exception
'Статус соединения (сообщение об ошибке)
StatusConnection = MyException.ToString
'Возврат отрицательного результата
ConnectToBDMySQL = False
End Try
End Function
End Module
В модуле формы напишем (далее с комментариями):
Public Class MySQLConnection
Private Sub btnConnectionStringToMySQL_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnConnectionStringToMySQL.Click
'Формируем строку соединения и записывем её в txtboxConnectionString
txtboxConnectionString.Text = StringConnectToBDMySQL(txtboxDriverToMySQL.Text,
txtboxIPToMySQL.Text, txtboxBDToMySQL.Text, txtboxUserToMySQL.Text,
txtboxPassToMySQL.Text, txtboxAccessToMySQL.Text)
End Sub
Private Sub btnConnectionStringToAccess_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnConnectionStringToAccess.Click
'Формируем строку соединения и записывем её в txtboxConnectionString
txtboxConnectionString.Text = StringConnectToBDAccess(txtboxProviderToAccess.Text,
txtboxUserToAccess.Text, txtboxPassToAccess.Text, txtboxPathToAccess.Text,
txtboxAccessToAccess.Text)
End Sub
Private Sub btnTestToAccess_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnTestToAccess.Click
'Эта строка - статус подключения
Dim StatusConnection As String
'Соединимся и получим результат
If ConnectToBDAccess(txtboxConnectionString.Text, StatusConnection) = True Then
'Соединение прошло удачно
MsgBox("Соединение прошло удачно. Тест выполнен. Строка состояния: "
& StatusConnection)
Else
'Соединение не осущесвилось
MsgBox("Соединение не осущесвилось! Строка состояния: " & StatusConnection)
End If
End Sub
Private Sub btnTestToMySQL_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btnTestToMySQL.Click
'Эта строка - статус подключения
Dim StatusConnection As String
'Соединимся и получим результат
If ConnectToBDMySQL(txtboxConnectionString.Text, StatusConnection) = True Then
'Соединение прошло удачно
MsgBox("Соединение прошло удачно. Тест выполнен. Строка состояния: "
& StatusConnection)
Else
'Соединение не осущесвилось
MsgBox("Соединение не осущесвилось! Строка состояния: " & StatusConnection)
End If
End Sub
End Class
Теперь скомпиляем проект и посмотрим что получиться. Для начала поместим по пути c:\odbc.mdb (настройки пути можно изменить) предварительно сделанный в Access - odbc.mdb. Так – же создадим таблицу в БД MySQL - BDn (настройки так-же изменить) – если это Денвер, то с помощью PhpMyAdmin включенной в пакет поставки. Теперь выберем одну из вкладок и сначала нажмем «Создать строку соединения» и далее «Тест». У некоторых он будет безотказно работать с первого раза :) .
Исходник:
http://www.kb.mista.ru/files/236/TestMySql.zip |