Class mysql (par le connecteur mysql) permet de se connecter, executer des requêtes et traiter leur resultats de manière ais

Description

Le titre est assez explicite ;)

Ceux qui ont galéré comme moi pour executer des requêtes ou un champ en DATETIME ou TIMESTAMP apprècieront cette source car il n'y a pas beaucoup d'infos à ce sujet : voir "Allow Zero Datetime=true;" dans "Connect".

Les fonctions que j'ai ajouté permettent de naviguer dans son résultat de requêtes un peu comme dans le langage PHP (enfin très éloigné quand même).

Ci-dessous : la source,
Ci-dessous-dessous : le Zip avec un exemple d'utilisation, (pour testé vous devez quand même le configurer, cad modifiez dans form1 les propriétés de connexion, et adapté les requètes a votre structure de base de données. TESTEZ LE EN MODE DEBUGAGE, le formulaire n'affiche rien).

Source / Exemple :


'Class pour utiliser les DLL de MySql Connector
'Version utilisé de MySql Connector : 5.0

Option Explicit On
Option Strict On

'il faut avoir importé dans les références : MySql.Data
'Disponible sur : http://dev.mysql.com/downloads/connector/net/5.2.html

Imports MySql.Data.MySqlClient
Public Class MySQL
    Private Const VAR_VERSION As String = "1.00"

    Private Conn As New MySqlConnection

    Private VAR_SERVER As String = "localhost"
    Private VAR_USER As String = "root"
    Private VAR_PASSWORD As String = ""
    Private VAR_DATABASE As String = ""

    Private VAR_Current_Row As Integer = 0 'Variable de propriété : GET/SET : N° de ligne en cour lue dans la table 
    Private VAR_EoT As Boolean = True 'Variable de propriété : GET : Indique si l'on est arrivé en fin de table
    Private VAR_SQL As String = "" 'Variable de propriété : GET/SET : Requête SQL en cour
    Private VAR_Rows As Integer = 0 'Variable de propriété : GET : Nombre de lignes total
    Private VAR_Cols As Integer = 0 'Variable de propriété : GET : Nombre de colonnes total

    Private VAR_DataTable As DataTable
    'Variable de propriété : GET : Le DataTable en cour = ON PEUT NAVIGUER DIRECTEMENT DEDANS après avoir executer 
    'la fonction query ou query_auto (Si on ne veut pas passer par les fonctions simplifié que j'ai crée ci-dessous)

    Private VAR_Affected_Rows As Integer = 0 'Variable de propriété : GET/SET : Le nombre de lignes affectés par une requête non SELECT

    Private VAR_Option_NonQuery_Auto As Boolean = True 'Variable de propriété : GET : Définit une option qui laisse la classe déterminer elle même le type de requête : SELECT ou non

#Region "Liste des propriétés"
    Public ReadOnly Property Version() As String
        Get
            Return VAR_VERSION
        End Get
    End Property
    Public Property Connect_Server() As String
        Get
            Return VAR_SERVER
        End Get
        Set(ByVal Server As String)
            VAR_SERVER = Server
        End Set
    End Property
    Public Property Connect_User() As String
        Get
            Return VAR_USER
        End Get
        Set(ByVal User As String)
            VAR_USER = User
        End Set
    End Property
    Public Property Connect_Password() As String
        Get
            Return VAR_PASSWORD
        End Get
        Set(ByVal Password As String)
            VAR_PASSWORD = Password
        End Set
    End Property
    Public Property Connect_Database() As String
        Get
            Return VAR_DATABASE
        End Get
        Set(ByVal Database As String)
            VAR_DATABASE = Database
        End Set
    End Property
    Public Property Current_Row() As Integer 'long ?
        Get
            Return VAR_Current_Row
        End Get
        Set(ByVal Current_Row As Integer) 'long ?
            VAR_Current_Row = Current_Row
        End Set
    End Property
    Public Property SQL() As String
        Get
            Return VAR_SQL
        End Get
        Set(ByVal SQL As String)
            VAR_SQL = SQL
        End Set
    End Property
    Public Property Option_NonQuery_Auto() As Boolean
        Get
            Return VAR_Option_NonQuery_Auto
        End Get
        Set(ByVal Option_NonQuery_Auto As Boolean)
            VAR_Option_NonQuery_Auto = Option_NonQuery_Auto
        End Set
    End Property
    Public ReadOnly Property Rows() As Integer 'long ?
        Get
            Return VAR_Rows
        End Get
    End Property
    Public ReadOnly Property Cols() As Integer
        Get
            Return VAR_Cols
        End Get
    End Property
    Public ReadOnly Property EoT() As Boolean
        Get
            Return VAR_EoT
        End Get
    End Property
    Public ReadOnly Property DataTable() As DataTable
        Get
            Return VAR_DataTable
        End Get
    End Property
    Public ReadOnly Property Affected_Rows() As Integer
        Get
            Return VAR_Affected_Rows
        End Get
    End Property
#End Region

    Public Sub Connect()
        'Connexion à la base de données
        Dim STR_CONNECTION As String = "server=" & VAR_SERVER & ";" _
                                     & "user id=" & VAR_USER & ";" _
                                     & "password=" & VAR_PASSWORD & ";" _
                                     & "database=" & VAR_DATABASE & ";" _
                                     & "Allow Zero Datetime=true;"
        '"Allow Zero Datetime=true;" POUR NE PAS AVOIR DE PROBLEMES AVEC LES DATETIME ET TIMESTAMP

        Conn.ConnectionString = STR_CONNECTION
        Conn.Open()
    End Sub

    Public Sub Close()
        'Fermeture de la base de données
        Conn.Close()
    End Sub

#Region "Query"
    Public Function Query() As Boolean
        'Execute la requête SQL stocké dans la propriété SQL 
        'et détermine si elle est de type SELECT ou non (si la 
        'propriété Option_NonQuery_Auto est égal à True) afin 
        'd'affecté dans les propriétés de "retour" des valeurs adéquates
        Dim SQL As String = VAR_SQL
        Return Query_NonQuery_Auto(SQL)
    End Function
    Public Function Query(ByVal SQL As String) As Boolean
        'Execute la requête SQL fournie en argument 
        'et détermine si elle est de type SELECT ou non (si la 
        'propriété Option_NonQuery_Auto est égal à True) afin 
        'd'affecté dans les propriétés de "retour" des valeurs adéquates
        Return Query_NonQuery_Auto(SQL)
    End Function
    Public Function Query(ByVal NonQuery As Boolean) As Boolean
        'Execute la requête SQL stocké dans la propriété SQL
        'selon le mode NonQuery
        Dim RST As Boolean = False
        Dim SQL As String = VAR_SQL
        Return Query_Execute(SQL, NonQuery)
    End Function
    Public Function Query(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean
        'Execute la requête SQL stocké dans la propriété SQL
        'selon le mode NonQuery
        Dim RST As Boolean = False
        Return Query_Execute(SQL, NonQuery)
    End Function
#End Region

#Region "Query_Auto (Connexion et deconnexion automatique)"
    'Fonctions identiques à Query sauf que la connexion et 
    'la deconnexion à la base se fait automatiquement (pourvu qu'on 
    'est bien remplit les propriétés de connexion
    Public Function Query_Auto() As Boolean
        Dim RST As Boolean = False
        Dim SQL As String = VAR_SQL
        Connect()
        RST = Query_NonQuery_Auto(SQL)
        Close()
        Return RST
    End Function
    Public Function Query_Auto(ByVal SQL As String) As Boolean
        Dim RST As Boolean = False
        Connect()
        RST = Query_NonQuery_Auto(SQL)
        Close()
        Return RST
    End Function
    Public Function Query_Auto(ByVal NonQuery As Boolean) As Boolean
        Dim RST As Boolean = False
        Dim SQL As String = VAR_SQL
        Connect()
        RST = Query_Execute(SQL, NonQuery)
        Close()
        Return RST
    End Function
    Public Function Query_Auto(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean
        Dim RST As Boolean = False
        Connect()
        RST = Query_Execute(SQL, NonQuery)
        Close()
        Return RST
    End Function
#End Region

#Region "Traitement de le requête SQL"
    Private Function As_SELECT(ByVal SQL As String) As Boolean
        'Détermine si la requête est de type SELECT
        Dim RST As Boolean = False
        If SQL.Substring(0, 6).ToLower.ToString = "select" Then RST = True
        Return RST
    End Function
    Private Function Query_NonQuery_Auto(ByVal SQL As String) As Boolean
        'Détermine le mode d'execution de la requete : SELECT ou AUTRE
        Dim RST As Boolean = False
        If VAR_Option_NonQuery_Auto Then
            Dim NonQuery As Boolean = Not As_SELECT(SQL)
            RST = Query_Execute(SQL, NonQuery)
        Else
            RST = Query_Execute(SQL, False)
        End If
        Return RST
    End Function
    Private Function Query_Execute(ByVal SQL As String, ByVal NonQuery As Boolean) As Boolean
        'Execute la requête

        Dim RST As Boolean = False

        'Initialise les propriétés
        VAR_Current_Row = 0
        VAR_EoT = True
        VAR_Rows = 0
        VAR_Cols = 0
        VAR_DataTable = Nothing
        VAR_Affected_Rows = 0

        Try
            If NonQuery Then
                'Si la requête n'est pas de type SELECT et donc ne renvoit pas de DataTable
                Dim reader As MySqlDataReader
                Dim cmd As New MySqlCommand(SQL, Conn)
                reader = cmd.ExecuteReader()

                'affecte la proprité contenant le nombre d'enregistrement affecté par la requête
                VAR_Affected_Rows = reader.RecordsAffected

                RST = True
            Else
                'La requête renvoit un DataTable
                Dim RST_DataTable As DataTable = New DataTable
                Dim Table As New DataSet
                Dim da As New MySqlDataAdapter
                da = New MySqlDataAdapter(SQL, Conn)
                da.Fill(Table, "RST")
                RST_DataTable = Table.Tables("RST")

                'Affecte les propriétés
                VAR_Current_Row = 0
                If RST_DataTable.Rows.Count = 0 Then
                    VAR_EoT = True
                Else
                    VAR_EoT = False
                End If
                VAR_Rows = RST_DataTable.Rows.Count
                VAR_Cols = RST_DataTable.Columns.Count
                VAR_DataTable = RST_DataTable

                RST = True
            End If

        Catch ex As MySqlException
            MessageBox.Show("Error connecting to the server: " + ex.Message)
        Finally
            VAR_SQL = SQL
        End Try

        Return RST
    End Function
#End Region

#Region "Fonctions de navigation de le DataTable"
    Private Function Update_Current_Row(ByVal Current_Row As Integer) As Boolean
        'Met à jour la propriété Current_Row si possible
        Dim RST As Boolean = False
        If Current_Row > 0 Then
            If Current_Row <= VAR_DataTable.Rows.Count Then
                VAR_Current_Row = Current_Row
                If VAR_Current_Row = VAR_DataTable.Rows.Count Then
                    VAR_EoT = True
                End If
                RST = True
            End If
        End If
        Return RST
    End Function

    Public Function Record_Previous() As Boolean
        'Recule de 1 la propriété Current_Row si possible
        Return Update_Current_Row(VAR_Current_Row - 1)
    End Function

    Public Function Record_Next() As Boolean
        'Avance de 1 la propriété Current_Row si possible
        Return Update_Current_Row(VAR_Current_Row + 1)
    End Function

    Public Function Get_Value(ByVal key As Object, Optional ByVal row As Integer = 0) As Object
        'Permet de récupéré la valeur de la colonne "key" qui peut 
        'soit être de type String (key) soit de type Numerique (Index)
        'en fonction de la propriété Current_Row ou de l'argument
        '"row" s'il est remplit
        Dim RST As Object

        If row = 0 Then
            row = VAR_Current_Row
        Else
            If Not Update_Current_Row(row) Then
                'Faudrais qu'une erreur se déclenche, genre : Indice en dehors des limites
            End If
        End If

        If IsNumeric(key) Then
            RST = VAR_DataTable.Rows(row).Item(CInt(key))
        Else
            RST = VAR_DataTable.Rows(row).Item(key.ToString)
        End If

        Return RST
    End Function
#End Region

End Class

Conclusion :


Merci à un ami qui se reconnaitra qui m'a aider à résoudre certaines énigmes tel le problème du DATETIME, et d'autres choses...

PS : j'avait commencé le VB NET, l'année dernière pour tester, mais j'avais dut arrêter pour cause de maintenance d'un logiciel fait en VB6, la j'viens de me remettre sur VBNET et maintenant :

JE LE LACHE PLUS, VB.net c'trop bien !!!!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.