Подключение и работа с MySQL в VB.NET

Предыстория. Выбор БД


Возникла необходимость подружить программу, написанную на VB, с сервером баз данных. Конечно, многочисленные сотоварищи — разработчики ПО могут поставить под сомнение мой выбор базы данных (и будут правы), назвав MSSQL самым простым и очевидным выбором. Но необходимо принять во внимание несколько фактов:
  • кроме основной программы (VB), заказчик пожелал иметь возможность использовать и web-интерфейс (php)
  • на сервере заказчика установлен MySQL


Настройка подключения к MySQL


Поскольку в VB нет стандартного механизма подключения к MySQL было принято решение использовать не ODBC, а Connector/NET.
Для начала необходимо подключить библиотеку коннектора.
По умолчанию в Solution Explorer'е существует пункт My Project. Его собственно и выбираем, далее переходим в References.
Должно выглядеть примерно так, но соответственно без MySql.Data. У меня уже подключена эта библиотека.
Нажимаем добавить (add), выбираем вкладку Browser и ищем библиотеку. Находится она по следующему пути: путь_куда_вы_ставили_mysql_connector/Assemblies/версия .net/MySql.Data.dll
После добавления библиотеки в проект обязательно измените параметр копировать локально (в Окне Свойств, Properties, при выделенном пункте списка) на true, иначе при запуске ПО на компьютере без MySQL Connector/NET приложение будет вываливаться с ошибкой dll.
После всего это можно спокойно приступать к написанию программы.

Подключение


Для начала импортируем типы строчкой Imports MySql.Data.MySqlClient. Ее необходимо разместить в области определения до создания каких либо классов/объектов. Это необходимо для того, чтобы избавить нас от необходимости каждый раз писать полный путь до типов при определении переменных.
Imports MySql.Data.MySqlClient

Для создания подключения необходимо создать объект типа MySqlConnection и задать ей ConnectionString (строка подключения — описывает необходимые параметры для подключения к серверу).
'User id пишется с пробелом, это не опечатка.
Dim conn As New MySqlConnection("Server=127.0.0.1;User id=test_user;password=test_pwd;database=test_db")

Таким образом, через conn программа будет подключаться к указанной базе на localhost'е, с указанными логином и паролем.

Выполнение запросов


Для исполнения запросов так же необходимо создать объект типа MySqlCommand.
 Dim cmd As New MySqlCommand

Текст запроса при таком положении дел задается путем изменения свойства CommandText объекта cmd:
 cmd.CommandText = "текст запроса"

Кроме того, важно не забыть указать, какое конкретно подключение использовать для выполнения запроса.
 cmd.Connection = conn

Для выполнения различных запросов к базе данных в Connector/NET используются различные функции.
Так, например, для выполнения запросов, возвращающих только общее количество задействованных строк, используется функция ExecuteNonQuery, а для возвращающих данные (строки) — создается объект reader.

В итоге, на выходе мы имеем приложение, которое при загрузке выполняет запрос к базе данных.
Imports MySql.Data.MySqlClient

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim conn As New MySqlConnection("Server=127.0.0.1;User id=test_user;password=test_pwd;database=test_db")
        Dim cmd As New MySqlCommand
        Try
            conn.Open()
            cmd.Connection = conn
            'Для выполнения запросов типа insert, update возможно использование ExecuteNonQuery, которая возвращает количество задействованных строк
            cmd.CommandText = "INSERT INTO `test_table` (`id`, `test_info`) VALUES (NULL, 'some text info for current id');"
            Try
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                'описание того, что программа должна делать в случае возникновения каких-либо непредвиденных обстоятельств
            End Try
            'для получения данных из таблиц (запросы типа select) используется reader.
            cmd.CommandText = "SELECT * FROM `test_table`"
            Dim reader As MySqlDataReader
            reader = cmd.ExecuteReader()
            While reader.Read()
                'получаем и сообщаем пользователю значения первого столбца базы данных для всех выбранных запросом строк
                MsgBox(reader.GetValue(0))
            End While
        Catch ex As Exception
           'описание действий при проблемах с подключением к БД
        End Try
    End Sub
End Class
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 12

    +6
    И что это делает на хабре?
      +6
      Минусуется.
      +2
      Ёклмн, не холивора ради, но чего ради вообще существует VB.NET, когда есть C#?
        +3
        Наверно для того, для чего и остальные реализации синтаксисов под. Net — облегчить переход на платформу уже сформировавшая специалистов, которым привычнее и удобнее конкретный синтаксис.
        –1
        Вы уж простите, но статья, мягко говоря, не уровня хабра. Да и от мускула пора отходить, к сожалению (к сожалению — потому что моя любимая БД в прошлом).
          0
          А вот не хватает иногда кратких описаний вида «как из .NET подключиться в MySQL».
          Надо-то буквально пару шагов чтобы проверить фичу, посмотреть и больше не использовать (например). Вместо этого необходимо выискать в громадном мануале на английском языке нужные пару шагов (а на английском я читаю на порядок медленнее).
          Уровень, не уровень… Пусть будет.
            +1
            Да бросьте, все это гуглится на раз. А Хабр он и ценен своим уровнем, что копаться среди мануалов для чайников в поисках нетривиальных ньюансов не приходится.
              0
              Вам по уровню не подошло. Другим что делать?
                +2
                Оставлю вас наедине с вашим нетривиальным вопросом, а то кармы не хватит на публикацию подготавливаемой статьи :)
                  +2
                  Недавно я написал небольшой помощник по авто-дискаверингу биндингов WCF-прокси (не через широковещательные запросы как в фреймворк встроено, а по урлу через DiscoveryClientProtocol).
                  Повыкидывал кучу app.config'ов, вычистив отовсюду клиентский System.ServiceModel. Радуюсь который день.
                  И вот тут бы поделиться примером, чтобы кому-нибудь да помогло.
                  А потом посмотрел — задача-то посильная, ILSpy отвечает на все вопросы. Вопрос времени. Уровнем стало быть не выходит. Плюшек нет, зато критиков не по делу полно. И ладно.
                  Вот и читаем рекламы гаджетов и информацию о свежих патентных судах и скандалах.
                    +3
                    Не принимайте близко к сердцу. Но ваша-то статья куда занятней будет и не сравнима с данной задачей. Пишите, публикуйте — почитаем :)
            +2
            Надо же с чего-то начинать.
            Спасибо за оценку. Оставлю маны для чайников, буду писать что-нибудь более «ценное».

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое