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

  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. 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 !
        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. 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