IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Fonction pour connexion BDD MySQL


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Fonction pour connexion BDD MySQL
    Bonjour à tous,

    Nouveau sur le forum, je me tourne vers vous pour m'aider à résoudre un problème que je n'arrive pas à solutionner, malgré des heures et des heures de recherches et de tests.

    Je me suis lancé dans le développement d'une application métier pour ma nouvelle activité professionnelle.
    Le gros de l'application se base sur de la lecture/écriture en base.

    Je cherche à réaliser une fonction que je puisse appeler afin d'ouvrir un connexion à la base et effectuer un test de validité de connexion,
    pour ensuite pouvoir faire mes requêtes.

    Le code fonctionne correctement lorsque je le copie/colle aux endroits où il est nécessaire.
    Par contre quand je le place dans une fonction et que je l'appelle dans le code d'une autre Form, cela ne fonctionne pas.

    Auriez-vous s'il vous plaît une idée de ce que je peux rater?

    Merci d'avance



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Class BDD
            Shared server As String = "127.0.0.1"
            Shared prt As String = "3306"
            Shared user As String = "root"
            Shared pass As String = "************"
            Shared db As String = "dbs*******"
            Shared conn As MySqlConnection
            Shared str As String
            Shared cmd As New MySqlCommand
            Shared dr As MySqlDataReader
     
            Shared Function TestConnexionDB() As Boolean
                Try
                    str = "server=" & server & ";user=" & user & ";database=" & db & ";port=" & prt & ";password=" & pass
                    conn = New MySqlConnection(str)
     
                    If conn.State = ConnectionState.Closed Then
                        conn.Open()
                        If ConnectionState.Open Then
                            Return True
                            conn.Close()
                        Else Return False
                            'MessageBox.Show("Connection BDD Failed!", "Connection", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        End If
     
                    End If
                Catch ex As Exception
                    MessageBox.Show(ex.Message.ToString)
                End Try
     
            End Function
     
            Shared Function OpenConnexionDB()
                Try
                    str = "server=" & server & ";user=" & user & ";database=" & db & ";port=" & prt & ";password=" & pass
                    conn = New MySqlConnection(str)
     
                    If conn.State = ConnectionState.Closed Then
                        conn.Open()
                        If ConnectionState.Open Then
                            Return True
                        Else
                            Return False
                            MessageBox.Show("Connection BDD Failed!", "Connection", MessageBoxButtons.OK, MessageBoxIcon.Information)
                        End If
                    End If
                Catch ex As Exception
                    MessageBox.Show(ex.Message.ToString)
                End Try
            End Function

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 689
    Points : 5 283
    Points
    5 283
    Par défaut
    Il est très joli ton code, tout en transparence.
    Tellement transparent qu'on a du mal à le voir !!

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par popo Voir le message
    Il est très joli ton code, tout en transparence.
    Tellement transparent qu'on a du mal à le voir !!
    Désolé, avec les bonnes balises ça semble ok et lisible

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 150
    Points : 1 671
    Points
    1 671
    Par défaut
    Return fait sortir directement de la fonction donc les instructions situées après ne sont pas exécutées.
    Les chemins qui passeraient par les catch, ne retournent à priori rien (il doit y avoir des warning à ce sujet)
    Sinon comment utilises-tu ta classes et qu'est-ce qui ne fonctionne pas ? (message d'erreur)

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 877
    Points
    1 877
    Par défaut
    Il semble y avoir un problème de scope de variable aussi je pense.
    Ceci devrait être probablement déclaré comme Public Shared:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Shared conn As MySqlConnection
    Mais à voir comment cette classe est appelée.
    Et comme dit plus haut, Return a pour effet de quitter la routine immédiatement et le code qui suit ne sera pas exécuté (exemple: conn.Close() dans TestConnexionDB), à moins d'utiliser une directive Finally pour du "cleanup" au sein d'un bloc try/catch.

    Mais en réalité, cette routine TestConnexionDB est parfaitement inutile et redondante. Tout ce que vous devez faire c'est utiliser OpenConnexionDB et fermer la connexion une fois le test accompli.

    Ici la connexion se fait en local mais pour une connexion réseau, il peut être utile de gérer la reconnexion en cas de coupure réseau.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par umfred Voir le message
    Return fait sortir directement de la fonction donc les instructions situées après ne sont pas exécutées.
    Les chemins qui passeraient par les catch, ne retournent à priori rien (il doit y avoir des warning à ce sujet)
    Sinon comment utilises-tu ta classes et qu'est-ce qui ne fonctionne pas ? (message d'erreur)
    Alors, effectivement j'ai des warnings comme quoi les fonctions ne retournent pas une valeur pour tous les chemins du code.
    Je ne comprenais pas pourquoi!
    Je pensais que les Catch retournaient la Messagebox, hors, si les Return font sortir directement... forcément...
    Il faut que je solutionne la suppression des Catch maintenant

    J'ai essayé de comprendre et de m'inspirer de code glané sur le net, mes bases limitées de VB remontent à longtemps.
    Je fais sans aucun doute des erreurs de débutant.


    J'ai créé une classe Clients avec les variables et les procédures, une classe BDD pour les fonctions OpenConnection etc.
    Je te passe le reste.
    Pour le cas précis:
    -Remplissage des champs du formulaire client
    -Validation -> appel de procédure de la classe Clients pour récupérer les champs, former la requête SQL
    -Appel de la fonction pour ouvrir la connexion à la base (dans ma procédure de la classe Clients)
    -Lancer la requête

    Je ne sais pas si je suis très clair.

    Je peux essayer de c/c le code, mais je ne suis pas sûr que ce soit clair en dehors des containers respectifs.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    Il semble y avoir un problème de scope de variable aussi je pense.
    Ceci devrait être probablement déclaré comme Public Shared:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Shared conn As MySqlConnection
    Mais à voir comment cette classe est appelée.
    Et comme dit plus haut, Return a pour effet de quitter la routine immédiatement et le code qui suit ne sera pas exécuté (exemple: conn.Close() dans TestConnexionDB), à moins d'utiliser une directive Finally pour du "cleanup" au sein d'un bloc try/catch.

    Mais en réalité, cette routine TestConnexionDB est parfaitement inutile et redondante. Tout ce que vous devez faire c'est utiliser OpenConnexionDB et fermer la connexion une fois le test accompli.

    Ici la connexion se fait en local mais pour une connexion réseau, il peut être utile de gérer la reconnexion en cas de coupure réseau.
    Bon, je reprends ce message de ma part qui n'est plus que partiellement utile.
    Voir mon dernier post.

    Reste cet aspect qui m'intéresse beaucoup:
    A terme, j'aimerais effectivement taper un bdd distante, mais je n'ai pas la moindre idée de comment gérer la reconnexion en cas de coupure réseau.
    Ceci dit je prend bonne note de ce point et vais tâcher de creuser la question!

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Janvier 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2023
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bon, j'ai essayé grâce à vos conseil de reprendre les fonctions liées à la ClasseBDD.

    J'ai tout simplifié au maximum et il semblerait que je m'étais bien compliqué la vie pour rien.

    Mais je reste confronté au même problème:
    Après avoir appelé la fonction d'ouverture de connexion à la base, il semble que celle-ci ne reste pas ouverte.

    Est-ce que je rate un fondamental?


    Appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ClasseBDD.OpenConnexionDB()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Public Shared Sub OpenConnexionDB()
     
            Dim conn As MySqlConnection
     
            str = "server=" & server & ";user=" & user & ";database=" & db & ";port=" & prt & ";password=" & pass
            conn = New MySqlConnection(str)
     
            conn.Open()
     
            If conn.State = ConnectionState.Closed Then MessageBox.Show("Error connbecting to BDD")
        End Sub

  9. #9
    Membre éclairé Avatar de r.morel
    Homme Profil pro
    Dessinateur CAO
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Dessinateur CAO
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 667
    Points
    667
    Par défaut
    Salut,
    Dans mes applications utilisant la BDD MySQL de notre ERP, j'ai créé une classe dédié aux relations avec la BDD. Elle regroupe la connection mais aussi les méthodes de recherches ou d'insertion de données.
    Voici un extrait de la classe BDD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Imports MySql.Data.MySqlClient
     
     
    ''' <summary>
    ''' Gère la relation avec la BDD de Synoptic et regroupe l'ensmeble des méthodes de lecture et d'écriture
    ''' </summary>
    Public Class BDDMySQL
     
    #Region " Champs "
        Public Connection As New MySqlConnection
        Public Chaine_connection As String = "server=nomduserveur;user id=root;persistsecurityinfo=True;database=nomdetaBDD;password=tonmdp"
        Public TestConnection As Boolean = False
     
    #End Region
     
    #Region " Constructeur "
        ''' <summary>
        ''' Gère la création d'un nouvel objet
        ''' </summary>
        Sub New()
            Try
                Connection.ConnectionString = Chaine_connection
                Connection.Open()
                TestConnection = True
                Connection.Close()
            Catch Erreur As Exception
                MsgBox("Une erreur empêche la connection SQL :" & Chr(10) & Erreur.Message & Chr(10) & Chr(10) & "L'ensembles des fonctionalités qui requierts la connection SQL seront inaccessibles.", MsgBoxStyle.Exclamation Or MsgBoxStyle.OkOnly, "Erreur SQL")
                TestConnection = False
            End Try
        End Sub
    #End Region
     
    #Region " Methodes "
        ''' <summary>
        ''' Recherche le code article d'un article à partir de son code2 
        ''' </summary>
        ''' <param name="Code_secondaire"></param>
        ''' <returns>Type : String</returns>
        Function Recherche_code_article(ByVal Code_secondaire As String) As String
            Using Connection
                Dim Commande_SQL_Recherche_Code_article As New MySqlCommand("SELECT ARTICLE FROM article WHERE (CODE_2=@Code_secondaire);", Connection)
                Dim Adapter_SQL As New MySqlDataAdapter
                Dim Data_SQL As MySqlDataReader
                Dim Resultat As String
     
                Try
                    Connection.Open()
                    Commande_SQL_Recherche_Code_article.Parameters.AddWithValue("@Code_secondaire", Code_secondaire)
                    Adapter_SQL.SelectCommand = Commande_SQL_Recherche_Code_article
                    Data_SQL = Commande_SQL_Recherche_Code_article.ExecuteReader()
                    Data_SQL.Read()
     
                    If Data_SQL.HasRows = True Then
                        Resultat = Data_SQL.GetString("ARTICLE")
                        Commande_SQL_Recherche_Code_article.Parameters.Clear()
                        Data_SQL.Close()
                        Connection.Close()
                        Return Resultat
                    Else
                        Commande_SQL_Recherche_Code_article.Parameters.Clear()
                        Data_SQL.Close()
                        Connection.Close()
                        Return Nothing
                    End If
                Catch ex As Exception
                    MsgBox("Erreur de la fonction Recherche_code_article : " & ex.Message, MsgBoxStyle.Critical, "Erreur BDD Synoptic")
                    Connection.Close()
                    Return Nothing
                End Try
            End Using
        End Function
    #End Region
    End Class
    Tu appels la class comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim MyBDDMySQL As New BDDMySQL
    Ensuite une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyBDDMySQL.Recherche_code_article(mavariable)
    En espérant t'avoir aider un peu.
    Bonne journée.
    Merci de ainsi que d'utiliser les boutons et

Discussions similaires

  1. [PHP 7] Fonction connexion BDD mysql to mysqli
    Par guigui69 dans le forum Langage
    Réponses: 1
    Dernier message: 10/04/2020, 12h15
  2. [MySQL] connexion bdd mysql
    Par Philosophiste dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/07/2008, 18h58
  3. [RegEx] trier un fichier txt pour alimenter bdd mysql
    Par chooky97150 dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2008, 01h43
  4. [WB11] Configurer la connexion bdd (mysql)
    Par zev dans le forum WebDev
    Réponses: 1
    Dernier message: 07/01/2008, 01h32
  5. Probleme connexion BDD mysql avec applet
    Par lancer83 dans le forum Applets
    Réponses: 25
    Dernier message: 01/08/2007, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo