VB.NET connexion base mysql et projet VBNET

Résolu
Bonjour,
je souhaiterais connecter mon projet vbnet à une base mysql, seulement je n'y arrive pas, à titre de test j'ai une table dans ma base mysql "reacteur"(id, capacité, localisation) et donc j'ai essayé avec un connecteur mais je n'y arrive pas
voici mon code:
 Dim maconnexion As MySqlConnection
 maconnexion = New MySqlConnection()
 maconnexion.ConnectionString = "server =localhost ;user = root ;password = "";database= final"

        maconnexion.Open()
        Dim macommand As New MySqlCommand
        Dim adaptateur As New MySqlDataAdapter
        Dim matable As New DataTable
        Dim requete As String

        requete= " SELECT * from reacteur"
        macommand.Connection = maconnexion
        macommand.CommandText = requete

        adaptateur.SelectCommand = macommand
        adaptateur.Fill(matable)
        For i As Integer = 0 To matable.Rows.Count - 1
            Dim numero As String
            Dim localisation As String
            localisation = matable(i)("numero").ToString
            numero = matable(i)("localisation ").ToString
            lstbox.Items.Add(numero)
  lstbox.Items.Add(  lstbox.Items.Add(numero))
        Next

        maconnexion.Close()

et donc je veux afficher dans une listebox (lstbox) mais je n'y arrive pas, j'ai mis ma base de données "final" au format sql, mais je ne sais pas vraiment dans quel dossier la mettre ou comment indiquer la source ?
quand j'arrive sur la page ça me dit " Le format de la chaîne d'initialisation n'est pas conforme à la spécification qui débute à l'index 32 " à la ligne :
Le format de la chaîne d'initialisation n'est pas conforme à la spécification qui débute à l'index 32


sauriez vous me conseillez pour interagir avec ma base de données ?? un grand merci d''avance !!

10 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Déjà ta chaine de connection est faussé !

    Dim Chaine As String = "server =localhost ;user = root ;password =" & """" & """" & ";database= final"

    maconnexion.ConnectionString = Chaine

    Cdt

    Lupin
    1. merci !
      mais j'ai deux textbox pour afficher les valeurs provenant de ma table ( le numero et la localisation ) et je sais pas comment m'y prendre pour afficher les valeurs

      j'ai mes deux textbox : txtnumero et txtlocalisation
      pour chacune d'entre elle, dans la propriété " databindings" puis "name" , j'ai selectionné le champ numero et localisation mais rien ne s'affiche ....
      comment ça se fait?
      1. re:

        Quelques question :

        Connais-tu l'objet [ BindingSource ] ?

        As-tu déjà travailler avec des objets fortement typés ?

        Il serait souhaitable que tu utilise une classe spécifique pour l'accès
        à la BD en affectant les lectures dans des listes fortements typés.

        Je n'ai réaliser à ce jour qu'un seul projet DEMO avec, MySQL,
        mes connaissances étant plus large avec Oracle, DB2 et Access.

        Je vais jeter un coup d'oeil sur mon modèle avec MySQL pour te fournir
        plus d'info.

        Cdt

        Lupin
        1. ça ne me dit rien l'objet BindingSource .

          Avec des objets fortement typés c'est à dire ? J'ai effectué quelques modifications, voici mon code:
              Dim connexion As MySqlConnection = New MySqlConnection()
                  Dim monadaptateur As MySqlDataAdapter = New MySqlDataAdapter()
                  Dim macom As MySqlCommand = New MySqlCommand
                  Dim marequete As String
                  Dim tablereacteur As New DataTable
          
                  Dim maliste As New List(Of String)
                  Dim myDataTable As New DataTable
                  Try
          
                      connexion.Open()
                      marequete = "SELECT * FROM reacteur"
          
                      macom.Connection = connexion
                      macom.CommandText = marequete
                      monadaptateur.SelectCommand = New MySqlCommand(marequete, maconnexion)
          
                      For i As Integer = 0 To myDataTable.Rows.Count - 1
                       'je veux afficher les valeurs dans leur txtbox respectif
                          txtnum.Text = myDataTable.Rows(i)("numero").ToString
                          txtcap.Text = myDataTable.Rows(i)("capacite").ToString
                          txt_local.Text = myDataTable.Rows(i)("localisation").ToString
          
                          'MsgBox( myDataTable.Rows(i)("nom").ToString)
          
                      Next
                      connexion.Close()
          
                  Catch ex As Exception
                      MsgBox("erreur : " + ErrorToString())
          
                  End Try
          

          mais j'ai le message d'erreur suivant : " the connection property has not been set or is null" en gros la connection n'a pas été etablit donc d'une part le probleme doit venir de là ....
          merci d'avance !
          1. re:

            Voici un objet fortement typé que tu as défini :-)

            Dim maliste As New List(Of String)

            Autre point

            la ligne :

            connexion.Close()

            devrait se retrouver dans le [ Finally ] du Try/Catch
            Try
            
            Catch
            
            Finnally
                connexion.Close()
            
            End Try
            


            Problème ou non, la connexion doit toujours être fermé.

            Je vais trouver la syntaxe exacte pour la connexion.

            À venir ...

            Cdt

            Lupin
            1. oki oki
              j'ai utilisé cela en croyant pouvoir afficher les données dans ma liste, de la manière suivante :
              numero ...... capacité ..... localisation
              1. re:

                Voici la définition :

                Imports MySql.Data.MySqlClient
                
                Public Class PC_UI_TO_CDA
                
                
                    Public Sub ObtenirListeReacteur()
                
                        Dim ChaineConnexion As String = String.Empty
                        Dim ChaineSQL As String = String.Empty
                        Dim StrTexte As New System.Text.StringBuilder
                        Dim Connexion As MySqlConnection
                
                        Try
                
                            ' Parametrage de la chaine de connection
                            ChaineConnexion = String.Format("server={0};user id={1}; password={2}; database=mysql; pooling=false", "localhost", "root", "")
                
                            Connexion = New MySqlConnection(ChaineConnexion)
                            Connexion.Open()
                
                            'Code
                            Dim MonAdapteur As MySqlDataAdapter
                            Dim MonDataTable As DataTable
                            Dim MonDataSet As New DataSet
                            Dim DataRowLocal As DataRow
                
                            ChaineSQL = "SELECT * FROM reacteur"
                            'ChaineSQL = "SELECT * FROM historique.reacteur"
                            MonAdapteur = New MySqlDataAdapter(ChaineSQL, Connexion)
                            MonAdapteur.Fill(MonDataSet, "membres")
                            MonDataTable = MonDataSet.Tables("membres")
                
                            For Each DataRowLocal In MonDataTable.Rows
                                If (DataRowLocal.Item(0) IsNot Nothing) Then
                                    ListBox1.Items.Add(Convert.ToString(DataRowLocal.Item(0)))
                                End If
                                If (DataRowLocal.Item(1) IsNot Nothing) Then
                                    ListBox2.Items.Add(Convert.ToString(DataRowLocal.Item(1)))
                                End If
                                If (DataRowLocal.Item(2) IsNot Nothing) Then
                                    ListBox3.Items.Add(Convert.ToString(DataRowLocal.Item(2)))
                                End If
                            Next
                
                        Catch ex As Exception
                            StrTexte.AppendLine("Erreur de connexion !")
                            StrTexte.AppendLine("Modele")
                            StrTexte.AppendLine("Constructeur : PC_config_ExeSQL")
                            StrTexte.AppendLine(ex.ToString)
                            MsgBox(StrTexte.ToString)
                        Finally
                            ChaineConnexion = String.Empty
                            Connexion.Close()
                        End Try
                
                    End Sub
                
                End Class
                


                1.) J'ai assumé que tu cherchais à obtenir la liste de la table
                ( reacteur ), donc j'ai accumulé les résultats dans des listbox.

                2.) Ce code est modifié, car je procède toujours avec des objets
                et 3 couches dans le modèle organique.

                Interface
                Controleur
                Data

                La couche Data est une couche (DLL) à 2 classes
                - L'Objet de service
                - Une liste d'objets de service

                La couche Controleur contient aussi 2 classes
                - Une classe Amie (Friends) - Les requêtes SQL
                - Une classe Public - La transaction

                donc l'interface n'accède jamais directement à la BD.

                Cdt

                Lupin
                1. merci, j'ai crée la classe PC_UI_TO_CDA jusque là tout va bien, dans celle-ci j'ai déclaré les variables listbox1,listbox2 et listbox3 .

                  Peux tu me dire si j'ai bien fait la manipulation suivante, dans ma forme de consultation des reacteurs, j'ai crée un objet de type pc_ui_to_cda, ensuite j'ai voulu appellé la methode "obtenirlisteReacteur" mais à partir de la ça bloque ....
                  code:
                  Dim monobjet As New PC_UI_TO_CDA
                          monobjet.ObtenirListeReacteur()
                  

                  le message d'erreur indique " constructeur: pc_ui_to_cda .... unable to connect to any of the specified mysql hosts ..."

                  il me dit ça quand j'ai rajouté ces deux lignes ......
                  je m'y connais en vbnet mais j'ai jamais vraiment pratiqué la manipulation de données avec une base ....
                  1. re:

                    Dans le code que je t'ai soumis, celui-ci était fait pour aller
                    directement dans le formulaire.

                    Si tu veux créer une classe contrôleur comme j'ai l'habitude
                    de faire, il te faut ajouter un constructeur dans la class PC_UI_TO_CDA
                    et ce mème vide :

                    Public Sub New()

                    End Sub

                    ainsi, tu compile la classe, tu ajoute la référence ( la Dll ), à ton
                    projet formulaire et ainsi tu devrais pouvour atteindre la méthode.

                    Autre suggestion, puisque tu semble à l'aise sous VB, je te suggère
                    de créer une classe objet ainsi qu'une classe collection.

                    Ex.:

                    Tu crée un nouveau projet dans lequel tu crée 2 fichiers ( 2 classes )

                    1 - La classe Objet - n.b. tu dois mettre le bon type en fonction
                    de ta BD

                    ici je déclare le membre ( zId ) en string, mais ce pourrait être un Int64 ...

                    Public Class Reacteur_ENT
                    
                    #Region "--- Attributs ---"
                    
                        Private Shadows zId As String = String.Empty
                        Private Shadows zCapacite As String = String.Empty
                        Private Shadows zLocalisation As String = String.Empty
                    
                    #End Region
                    
                    #Region "--- Propriétés ---"
                    
                        Public Property Id() As String
                            Get
                                Return Me.zId
                            End Get
                            Set(ByVal value As String)
                                Me.zId = value
                            End Set
                        End Property
                    
                        Public Property Capacite() As String
                            Get
                                Return Me.zCapacite
                            End Get
                            Set(ByVal value As String)
                                Me.zCapacite = value
                            End Set
                        End Property
                    
                        Public Property Localisation() As String
                            Get
                                Return Me.zLocalisation
                            End Get
                            Set(ByVal value As String)
                                Me.zLocalisation = value
                            End Set
                        End Property
                    
                    #End Region
                    
                    #Region "--- Constructeur ---"
                    
                        Public Sub New()
                    
                        End Sub
                    
                    #End Region
                    
                    End Class
                    


                    2 - La classe colection ( Liste fortement typé )

                    Public Class Reacteur_LST
                        Inherits List(Of Reacteur_ENT)
                    
                    End Class
                    


                    tu compile ce projet et tu ajoute cette référence à ton projet
                    formulaire et à ton projet PC_UI_TO_CDA

                    Tu modifie la signature de Obtenir ainsi :

                    Public Function ObtenirListeReacteur() As Reacteur_LST
                    
                    ' La partie de la boucle devient :
                                Dim MaCol As Reacteur_LST
                                Dim EntX As Reacteur_ENT
                    
                                For Each DataRowLocal In MonDataTable.Rows
                                    EntX = New Reacteur_ENT
                                    If (DataRowLocal.Item(0) IsNot Nothing) Then
                                        EntX.Id =(Convert.ToString(DataRowLocal.Item(0)))
                                    End If
                                    If (DataRowLocal.Item(1) IsNot Nothing) Then
                                        EntX.Capacite =(Convert.ToString(DataRowLocal.Item(1)))
                                    End If
                                    If (DataRowLocal.Item(2) IsNot Nothing) Then
                                        Entx.Localisation = (Convert.ToString(DataRowLocal.Item(2)))
                                    End If
                                    MaCol.Add(EntX)
                                Next
                    
                    
                                Return MaCol
                    
                    End Function
                    


                    donc dans ton code du formulaire, ton code devient :

                    Dim LaCollection As Reacteur_LST

                    Dim monobjet As New PC_UI_TO_CDA

                    LaCollection = monobjet.ObtenirListeReacteur()

                    ensuite tu peux alimenter n'importe quoi avec la collection.

                    Cdt

                    Lupin