VB.NET connexion base mysql et projet VBNET

Résolu
angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   -  
angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   -
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. Utilisateur anonyme
     
    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
  2. Utilisateur anonyme
     
    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
  3. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    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?
    0
  4. Utilisateur anonyme
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    ç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 !
    0
  7. Utilisateur anonyme
     
    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
    0
  8. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    oki oki
    j'ai utilisé cela en croyant pouvoir afficher les données dans ma liste, de la manière suivante :
    numero ...... capacité ..... localisation
    0
  9. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    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 ....
    0
  10. Utilisateur anonyme
     
    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
    0
  11. angelus1821 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   16
     
    ok merci , je regarde ça, et je te dis quoi
    0