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

ASP.NET Discussion :

Duplication d'éléments récupérés depuis la base


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut Duplication d'éléments récupérés depuis la base
    Bonjour,
    Je fais présentement un site en ASP.net VB.NET. Je vais vous montrer le code que j'utilise et après vous dire qu'est-ce qui ne fonctionne pas.

    Code de la classe LangueProvider.vb :
    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
    Imports Microsoft.VisualBasic
    Imports System.Data.SqlClient
    Imports langue
    Imports GlobalFunction
     
    Public Class langueProvider
        Public Shared Sub LoadLangue(ByRef langues As ArrayList, ByVal strLangue As String)
            Dim strSQL As String
            Dim mySQL As SqlCommand
            Dim mdt As SqlDataReader
            Dim langue As New langue
     
            strSQL = "SELECT * FROM [LANGUE] WHERE ([LANGUE] = '" & strLangue & "') ORDER BY [ID]"
     
            mySQL = New SqlCommand(strSQL, GlobalFunction.ConnectionOpen)
     
            mdt = mySQL.ExecuteReader()
     
            While mdt.Read()
                langue = New langue
                langue.id = mdt("ID")
                langue.langue = mdt("LANGUE")
                langue.text = mdt("TEXT")
     
                langues.Add(langue)
            End While
     
            GlobalFunction.ConnectionClose()
        End Sub
    End Class
    Code de la classe LangueBusiness :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Imports Microsoft.VisualBasic
    Imports langue
    Imports langueProvider
     
    Public Class LangueBusiness
        Public Sub getLangue(ByRef langues As ArrayList, ByVal strLangue As String)
            LoadLangue(langues, strLangue)
        End Sub
    End Class
    Code de la page aspx.vb :
    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
     
    Partial Class _Default
        Inherits System.Web.UI.Page
     
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim langues As New ArrayList
            Dim langueBusiness As New LangueBusiness
     
            langueBusiness.getLangue(langues, "FR")
     
            If langues.Count = 0 Then
                Me.TextBox1.Text = "Aucune langue"
            Else
                Me.TextBox1.Text = langues(0).text & langues(1).text
            End If
     
        End Sub
    End Class
    Le résultat de la requête SQL est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1  FR  Bienvenue
    2  FR  Au REVOIR
    Mais quand j'ouvre la page aspx, il m'affiche dans mon textbox AU REVOIRAU REVOIR. Au lieu d'avoir 2 objets différents dans ma arraylist, j'ai 2 objets pareil... Je pense que ca doit être la classe LangueProvider le problème mais je ne vois tout simplement pas l'erreur.

    Merci

    P.S. Oui je le fais en architecture 3-tier

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Oui, le problème se situe dans langueProvider.

    C'est une erreur assez fréquente quand on débute en langage objet.
    Il te faut déclarer ta variable langue DANS la boucle, comme indiqué ci-dessous en gras, sinon toutes les langues de ton tableau auront la même valeur, c'est-à-dire la dernière récupérée (ici : AU REVOIR) :

    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
    Public Class langueProvider
        Public Shared Sub LoadLangue(ByRef langues As ArrayList, ByVal strLangue As String)
            Dim strSQL As String
            Dim mySQL As SqlCommand
            Dim mdt As SqlDataReader
     
            strSQL = "SELECT * FROM [LANGUE] WHERE ([LANGUE] = '" & strLangue & "') ORDER BY [ID]"
     
            mySQL = New SqlCommand(strSQL, GlobalFunction.ConnectionOpen)
     
            mdt = mySQL.ExecuteReader()
     
            While mdt.Read()
                Dim langue As New langue
                langue.id = mdt("ID")
                langue.langue = mdt("LANGUE")
                langue.text = mdt("TEXT")
     
                langues.Add(langue)
            End While
     
            GlobalFunction.ConnectionClose()
        End Sub
    End Class
    PS : d'autre part, d'une manière générale, évite de nommer tes variables de la même façon que la classe, ça peut vite t'embrouiller.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Merci de ton aide mais c'est de cette manière que je l'avais fait au début avant de faire de nombreux test et ca ne fonctionne pas... je viens de le réesseyer et ca ne fonctionne pas.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Oui, le problème se situe dans langueProvider.

    C'est une erreur assez fréquente quand on débute en langage objet.
    Il te faut déclarer ta variable langue DANS la boucle, comme indiqué ci-dessous en gras, sinon toutes les langues de ton tableau auront la même valeur, c'est-à-dire la dernière récupérée (ici : AU REVOIR) :
    non, il crée une nouvelle instance de langue à chaque itération, donc le problème n'est pas là

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par tomlev Voir le message
    non, il crée une nouvelle instance de langue à chaque itération, donc le problème n'est pas là
    Oups, oui, j'ai vérifié dans mon code et je fais pareil
    Scusez, j'ai écrit trop vite

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2003
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2003
    Messages : 353
    Par défaut
    Salut,
    la en regardant comme ça, je ne comprends pas ce qui cloche.
    As tu fais du pas à pas pour voir comment est "set" ton arrayList.

    Aussi, le problème ne vient pas de la, mais j'ai peut être quelques conseils qui peuvent être utiles, et d'autres pourront dire s'ils font comme ca:

    1. Dans ton code, tu as des noms de variable qui le meme nom que les classes.
    Cela ne semble pas bugger, mais pour la lisibilité c pas top
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim langue As New langue
    2. Tu instancies un objet que tu n'es pas sur d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim langue As New langue
    2.Tu utilises un tableau que tu passes en paramêtre byref.
    Pourquoi ne pas faire en sorte que cela te renvoit ce que tu veux.

    Je te réécris ton code d'une autre manière

    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
    Public Class langueProvider
        Public Shared function LoadLangue(ByVal strLangue As String) as List(of Langue)
    		Dim l As nothing
    		Dim ListLangues As nothing
    		Dim strSQL As String
            Dim mySQL As SqlCommand
            Dim mdt As SqlDataReader
     
     
            strSQL = "SELECT * FROM [LANGUE] WHERE ([LANGUE] = '" & strLangue & "') ORDER BY [ID]"
     
    		mySQL = New SqlCommand(strSQL, GlobalFunction.ConnectionOpen)
     
            mdt = mySQL.ExecuteReader()
     
    		if(mdt.read()) then
    			ListLangue = new List(Of Langue)
     
    	        While mdt.Read()
    	            l = New langue
    	            l.id = mdt("ID")
    	            l.langue = mdt("LANGUE")
    	            l.text = mdt("TEXT")
     
    	            ListLangue.Add(langue)
    	        End While
    		end if
     
            GlobalFunction.ConnectionClose()
     
    		return ListLangues
     
        End Sub
    End Class
    Business

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Imports Microsoft.VisualBasic
    Imports langue
    Imports langueProvider
     
    Public Class LangueBusiness
        Public shared function getLangue(ByVal strLangue As String) as List(Of Langue)
            return langueProvider.LoadLangue(strLangue)
        End Sub
    End Class
    et la page

    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
     Partial Class _Default
        Inherits System.Web.UI.Page
     
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            dim ListLangue = langueBusiness.getLangue("FR")
     
            If ListLangue.Count = 0 Then
                Me.TextBox1.Text = "Aucune langue"
            Else
                for each l as langue in ListLangue
    				Me.TextBox1.Text += l.text
    			next	
    		End If
     
        End Sub
    End Class
    Excusez moi pour mon VB, je C# maintenant, donc je ne sais pas trop si la syntaxe est bien bonne partout

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Merci Promesses pour ton aide.

    Je suis d'accord je pourrais nommer mieux mes variables, je tâcherai de faire attention.

    Je sais que j'instencie un objet que je ne suis pas sur d'utiliser mais c'est simplement une erreur dut aux nombreux essaies que j'ai fait avant de venir sur le forum. Dans le code que j'ai sur mon server, je ne l'instencie pas 2 fois.

    Pour le fait de retourner une list au lieu de l'envoyé en référence, je crois que c'est simplement une préférence de programmation mais je vais quand même tester en arrivant chez moi ce soir.

    Et tu dis de faire une liste de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListLangue = new List(Of Langue)
    Je voulais faire une list comme cela mais ca ne fonctionne pas, le type list n'existe pas. C'est pour cela que j'utilise un arraylist et je ne peux pas le typer en faisant (of langue)

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Macss Voir le message
    le type list n'existe pas
    Si si, je t'assure qu'il existe... à moins que tu ne sois en 1.1, mais vu qu'il y a une classe partielle dans ton code ça m'étonnerait
    Il faut ajouter un imports au début de ton fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports System.Collections.Generic

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Ha j'ai pas ajouter cet import. Je vais l'esseyer ce soir! Peut-être que ca va régler le problème

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Macss Voir le message
    Ha j'ai pas ajouter cet import. Je vais l'esseyer ce soir! Peut-être que ca va régler le problème
    Honnêtement, ça m'étonnerait que ça change quelque chose, je ne pense pas que le problème soit lié à ça : ArrayList ne marche par moins bien que List(Of T)...

    En voyant le code comme ça, je ne vois pas trop d'où vient le problème, mais si tu exécutes ton programme pas à pas en observant les valeurs des variables, ça t'aidera sûrement à repérer où est l'erreur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi/Reception vers/depuis une base SQL
    Par TocTocKiéLà? dans le forum MFC
    Réponses: 2
    Dernier message: 31/10/2005, 19h14
  2. Liens depuis une base de donnée statique
    Par LucG dans le forum Access
    Réponses: 4
    Dernier message: 26/10/2005, 11h12
  3. [SGBD] affichage d'image jpeg depuis une base mysql
    Par eric_300 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/09/2005, 12h27
  4. Exportation de données depuis une base
    Par david71 dans le forum JBuilder
    Réponses: 2
    Dernier message: 22/06/2004, 10h31
  5. Réponses: 2
    Dernier message: 26/02/2003, 11h47

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