[VB.NET] Модуль для работы с MySQL

Тема в разделе ".NET", создана пользователем Цукер, 22 июн 2014.

  1. Цукер

    Цукер Сам себе призедент

    Moderator
    Регистр.:
    5 мар 2008
    Сообщения:
    414
    Симпатии:
    375
    Не так давно решил перейти с MSSQL на mysql изза нужных мне приемуществ.
    Работа с этой СУБД очень слабо освещен в сети(ну или уменя гугл не правильный), потому решил накидать простой модуль для выполнения запросов в БД. (Потрачено на него было 10 минут потому прошу строго не судить)

    Для работы с mysql в VS надо скачать конектор Перейти по ссылке в свойствах проекта добавить dll - и не забудьте поставить чтобы он копировался вместе с проектом иначе не будет работать на машине без этого канектора, так же стоит отметить что VS по не обьяснимым причинам - па разному работает с разными версимя этого канектора, поэтому используйте ту версию конектора с которой компилировали.

    Сам модуль:
    Состоит из нескольких функций(мне было лениво пистаь коменты в коде, так как писалось для себя, потому опишу тут)
    InitDB() - просто проверка коректности подключение и наличие прав на БД, можно использовать например для записи сессий - возвращает True если все удачно или False если все печально
    insertData(sqlstring As String) - выполняет запрос в БД с командой инсерт, возвращает ID добавленой записи.
    updateData(sqlstring As String) - выполняет запрос с командой Update возвращает True если все удачно или False если все печально

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

    КОД:
    Код:
    Imports MySql.Data.MySqlClient
    Module base
      Public conn As New MySqlConnection("Server=127.0.0.1;User id=ПОЛЬЗАВАТЕЛЬ;password=ПАРОЛЬ;database=БАЗА-ДАННЫХ")
      Public Function InitDB()
      Dim statecondb As Boolean
      Dim cmd As New MySqlCommand
      Try
      conn.Open()
      cmd.Connection = conn
      cmd.CommandText = "INSERT INTO `test_table` (`id`, `test_info`) VALUES (NULL, '" & Now & "');"
      Try
      cmd.ExecuteNonQuery()
      Catch ex As Exception
      End Try
      cmd.CommandText = "SELECT * FROM `test_table`"
      Dim reader As MySqlDataReader
      reader = cmd.ExecuteReader()
      While reader.Read()
      statecondb = True
      End While
      Catch ex As Exception
      statecondb = False
      End Try
      conn.Close()
      Return statecondb
      End Function
      Public Function insertData(sqlstring As String)
      Dim statecondb As String
      Dim cmd As New MySqlCommand
      Try
      conn.Open()
      cmd.Connection = conn
      cmd.CommandText = sqlstring
      Try
      cmd.ExecuteNonQuery()
      Catch ex As Exception
      msg.errormsg("Не возможно добавить запись в БД (INSERT_DATA)")
      End Try
      cmd.CommandText = "SELECT LAST_INSERT_ID();"
      Dim reader As MySqlDataReader
      reader = cmd.ExecuteReader()
      While reader.Read()
      statecondb = reader.GetValue(0)
      conn.Close()
      Return statecondb
      Exit Function
      End While
      Catch ex As Exception
      msg.errormsg("Не возможно определить успешность подключения к БД")
      End Try
      conn.Close()
      statecondb = 0
      Return statecondb
      End Function
      Public Function updateData(sqlstring As String)
      Dim statecondb As Boolean
      Dim cmd As New MySqlCommand
      Try
      conn.Open()
      cmd.Connection = conn
      cmd.CommandText = sqlstring
      Try
      cmd.ExecuteNonQuery()
      statecondb = True
      Catch ex As Exception
      msg.errormsg("Не возможно обновить запись в БД (UPDATE_DATA)")
      End Try
      Catch ex As Exception
      msg.errormsg("Не возможно проверить подключение к БД (UPDATE_DATA)")
      End Try
      conn.Close()
      Return statecondb
      End Function
    End Module
    
    модуль вывода ошибок и записи в лог
    Код:
    
    Imports System.Diagnostics
    Module msg
        Public Sub errormsg(msg As String)
            Dim logStatus As System.Diagnostics.EventLog
            logStatus = New System.Diagnostics.EventLog
            logStatus.Source = "StatusSource"
            logStatus.WriteEntry(Now & "> " & "{Error} >" & msg, EventLogEntryType.Information)
            MsgBox(msg, MsgBoxStyle.Critical, "")
        End Sub
        Public Sub infomsg(msg As String)
            Dim logStatus As System.Diagnostics.EventLog
            logStatus = New System.Diagnostics.EventLog
            logStatus.Source = "StatusSource"
            logStatus.WriteEntry(Now & "> " & "{Info} >" & msg, EventLogEntryType.Information)
            MsgBox(msg, MsgBoxStyle.Information, "")
        End Sub
    End Module
    


    Использование:
    base.updateData("sql запрос")
    base.insertData("sql запрос")

    Конечно можно использовать и другие методы работы с бд, но официальные както приятнее)
     
    Последнее редактирование: 22 июн 2014
    Шумадан нравится это.
  2. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    лучше, конечно, вывести свойства подключения в файл конфигурации и сделать запрос параметризированным, но на скорую руку сойдёт
     
    SilverGhost нравится это.
  3. omear

    omear Писатель

    Регистр.:
    8 авг 2014
    Сообщения:
    9
    Симпатии:
    1
    Есть ошибки в коде, пожалуйста, не забудьте проверить линию 105
     
  4. omear

    omear Писатель

    Регистр.:
    8 авг 2014
    Сообщения:
    9
    Симпатии:
    1
    Перейти по ссылке

    Код:
    Imports System.Data
    
    Imports MySql.Data
    Imports MySql.Data.MySqlClient
    
    Public Class Tutorial1
        Public Shared Sub Main()
            Dim connStr As String = "server=localhost;user=root;database=world;port=3306;password=******;"
            Dim conn As New MySqlConnection(connStr)
            Try
                Console.WriteLine("Connecting to MySQL...")
                conn.Open()
            Catch ex As Exception
                Console.WriteLine(ex.ToString())
            End Try
            conn.Close()
            Console.WriteLine("Done.")
        End Sub
    End Class
     
  5. Шумадан

    Шумадан Хабарра!!11

    Регистр.:
    6 фев 2008
    Сообщения:
    1.728
    Симпатии:
    2.105
    а чем ваш код отличается, от кода ТС, ну, по большому счёту?
     
    Джуга и Ctrogan нравится это.