Книга знаний

Инф. технологии

Создание подключения к MySQL и Access из VB.Net

Создание подключения к MySQL и Access из VB.Net. В статье рассмотрены 2 базы данных и 2 различных способа соединения – MySQL по ODBC и Access по OLEDBАвтор статьи: DGorgoN | Редакторы: Волшебник
Последняя редакция №17 от 30.05.06 | История
URL: http://kb.mista.ru/article.php?id=236

Ключевые слова: 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 Режим доступа
TextBoxtxtboxDriverToMySQL{MySQL ODBC 3.51 Driver}
TextBoxtxtboxIPToMySQLlocalhost
TextBoxtxtboxBDToMySQLBDn
TextBoxtxtboxUserToMySQLroot
TextBoxtxtboxPassToMySQL
TextBoxtxtboxAccessToMySQL3
ButtonbtnConnectionSTRingToMySQLСоздать строку соединения
ButtonbtnTestToMySQLТест


Слой "Соединение с Access":

Элемент

Свойство Name

Свойство Text

LabellblProviderToAccessПровайдер (поставщик БД)
Label lblPathToAccessПуть к файлу
Label lblUserToAccessПользователь
Label lblPassToAccessПароль
Label blAccessToAccessРежим доступа
TextBoxtxtboxProviderToAccessMicrosoft.Jet.OLEDB.4.0
TextBoxtxtboxPathToAccessc:\odbc.mdb (Этот файлик предлагается создать самостоятельно)
TextBoxtxtboxUserToAccess
TextBoxtxtboxPassToAccess
TextBoxtxtboxAccessToAccessReadWrite|Share Deny None
ButtonbtnConnectionSTRingToAccessСоздать строку соединения
ButtonbtnTestToAccessТест


2)    Создадим вне слоёв Label – "Строка соединения" и TextBox:

Элемент

Свойство Name

Свойство Text

Label lblConnectionSTRing Строка соединения
TextBoxtxtboxConnectionSTRing


В модуле напишем (далее с комментариями):

'Подключаем классы 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

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика