VB.NET connexion base mysql et projet VBNET

Résolu/Fermé
Signaler
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
-
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
-
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


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
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
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

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
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
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

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
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
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
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
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

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
Messages postés
192
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
21 décembre 2014
16
ok merci , je regarde ça, et je te dis quoi
0