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 :

Des functions dans les classes, est-ce le bon endroit?


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Par défaut Des functions dans les classes, est-ce le bon endroit?
    Bonjour,

    J'ai créé une fonction qui me donne le Identity Column d'un employé pour que je puisse garder une trace. J'ai sauvegardé cette fonction dans class1.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
     
    Imports Microsoft.VisualBasic
    Imports System.Data.SqlClient
     
    Partial Class UserInfoFunction
     
        Protected Function GiveEmployeeId(ByVal NomUsager As String, ByVal MotPasse As String) As Int32
     
            Dim connect As New SqlConnection("Data Source=SourceKekchose;Initial Catalog=bd;Persist Security Info=True;User ID=admin;Password=motpasse")
            connect.Open()
     
            Dim cmdRetrieveId As New SqlCommand("SELECT EmployeId FROM(tblEmploye) WHERE NomEmploye = '" & NomUsager & "' AND MotPasseEmploye = '" & MotPasse & "') ")
     
            Dim id As Int32
     
            id = cmdRetrieveId.ExecuteScalar
            connect.Close()
            GiveEmployeeId = id
     
        End Function
     
    End Class

    1ière question : est-ce le bon endroit?
    2ième question : comment faire le lien avec ma page aspx?

    Merci,

    CWagon

  2. #2
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Bon allez, on va répondre à une question de débutant ( en espérant avoir compris, histoire de pas dire de connerie).

    Donc oui, c'est la bonne place. La prochiane fois, pense à la balise CODE pour mettre en avant ton code, c'est plus facile à lire parce que y a des couleur automatique. C'est le bouton avec le petit #

    Par contre, le Partial Class du départ et le Inherits me paraisse pas trés bon.
    Dans une classe externe on est plutôt sur un Public Class qui n'hérite de rien.

    Ensuite, pour faire le lien avec ta page c'est simple : le codeBehind de ta page tu va mettre un Imports en haut. Normalement tu dois retrouver le nom de ta classe dans la première liste qui apparait aprés le Imports.

    Ensuite tu va t'amuser avec les déclaration de Sub et de Function pour savoir si tu dois les metre Public, Sahred, Private ou autre truc du genre.

    Espérant avoir répondu à ta question,

    Kenavo

  3. #3
    Membre confirmé
    Profil pro
    UN
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Allemagne

    Informations professionnelles :
    Activité : UN
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Par défaut reponse
    Bonjours

    L'exemple que vous avez creer s'appel un Getter! vous faites un Get sur l'Identity de l'employe!

    dans ce cas, le mettre dans la classe est une bonne chose, ce qu'il faudrait corriger dans votre code serait la connexion

    je vous propose de faire comme suit:


    au niveau de class1.vb:
    Mettez seulement le bout de code permettant le get en fonction du login et pass!

    au niveau de la page aspx:
    realisez votre connexion et vos objets command ou adapter independament de la class1.vb

    puis instancier un objet de "class1" grace a l'operateur 'new' et appellez votre get!

    Si vous suivez cette methode, vous aurez respecter "l'encapsulation des données", lier la class employe a la page aspx, puis, vous pourriez reutiliser la fonction pour d'autre senario d'utilisation!

    Bonne chance, n'empeche que vous pouvez toujours poser vos questions, elles seront les bienvenue!

    Alabama song

  4. #4
    Membre confirmé
    Profil pro
    UN
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Allemagne

    Informations professionnelles :
    Activité : UN
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Par défaut reponse
    Bonjours

    L'exemple que vous avez creer s'appel un Getter! vous faites un Get sur l'Identity de l'employe!

    dans ce cas, le mettre dans la classe est une bonne chose, ce qu'il faudrait corriger dans votre code serait la connexion

    je vous propose de faire comme suit:


    au niveau de class1.vb:
    Mettez seulement le bout de code permettant le get en fonction du login et pass!

    au niveau de la page aspx:
    realisez votre connexion et vos objets command ou adapter independament de la class1.vb

    puis instancier un objet de "class1" grace a l'operateur 'new' et appellez votre get!

    Si vous suivez cette methode, vous aurez respecter "l'encapsulation des données", lier la class employe a la page aspx, puis, vous pourriez reutiliser la fonction pour d'autre senario d'utilisation!

    Bonne chance, n'empeche que vous pouvez toujours poser vos questions, elles seront les bienvenue!

    Alabama song

  5. #5
    Membre confirmé
    Profil pro
    UN
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Allemagne

    Informations professionnelles :
    Activité : UN
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Par défaut
    Excusez lz message en double, le serveur...
    Or, si vous faite la combinaison entre les instructions de notre ami Zooffy et mes les miennes, votre code sera parfait!


  6. #6
    Membre averti
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Par défaut
    Votre aide est grandement appréciée!

    Citation Envoyé par Alabama-song Voir le message

    au niveau de la page aspx:
    realisez votre connexion et vos objets command ou adapter independament de la class1.vb

    Alabama song
    Pourquoi garder la connexion et objects command sur la page aspx?

    J'ai réussi à instancier et tout, je reçois cette erreur :

    InvalidOperationException: ExecuteScalar: Connection property has not been initialized.]

    CWagon

  7. #7
    Membre confirmé
    Profil pro
    UN
    Inscrit en
    Février 2007
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Allemagne

    Informations professionnelles :
    Activité : UN
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 92
    Par défaut
    au lieu de :id = cmdRetrieveId.ExecuteScalar
    utilisez : id = cmdRetrieveId.ExecuteReader

    explications:
    ExecuteScalar : pour les operation de calcule (select avg(champ) from..., select sum(champ) from...,select count(champ) from...)
    ExecuteReader: pour la lecture des données(select * from ....)
    On peut utilisé id = cmdRetrieveId.ExecuteReader dans les deux cas, mais on ne peut jamais utiliser id = cmdRetrieveId.ExecuteScalar pour les deux cas !

    Alabama song

  8. #8
    Membre averti
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Par défaut À un cheveux de la réponse
    Mon code semble o.k., mais je reçois toujours cette erreur :

    System.InvalidOperationException: ExecuteReader: Connection property has not been initialized.
    qui pointe sur la ligne Dim id As String = Convert.ToString...

    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
     
    Public Class UserInfoFunction
     
        Public Function GiveEmployeeId(ByVal NomUsager As String, ByVal MotPasse As String) As String
     
            Dim connect As New SqlConnection("Data Source=SourceChose;Initial Catalog=bdComplicite;Persist Security Info=True;User ID=admin;Password=motpasse")
            connect.Open()
     
            Dim cmdRetrieveId As New SqlCommand("SELECT IdEmploye FROM [tblEmploye] " & _
                                                "WHERE NomEmploye = '" & NomUsager & "' AND MotPasseEmploye = '" & MotPasse & "') ")
     
            Dim id As String = Convert.ToString(cmdRetrieveId.ExecuteReader())
            GiveEmployeeId = id
            connect.Close()
     
        End Function
     
    End Class

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    l'objet command doit avoir une propriété connexion sinon il peut pas deviner, donc il faut lui donner le tient
    executescalar doit etre le bon truc par contre
    car executereader ne peut pas renvoyer un string directement, ca renvoie un jeu d'enregistrement et ensuite on peut récupérer les données qu'il y a dedans
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre averti
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Par défaut Et voilà
    Merci à chacun d'entre vous pour votre aide avec un p'tit nouveau, des fois on se casse plus la tête qu'on le devrait.

    J'ai ajouté un SqlReader pour sortir la donnée et maintenant tout fonctionne.


    Merci encore,

    CWagon

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/01/2009, 16h04
  2. Est-il possible de travailler avec des index dans les checkboxes ?
    Par beegees dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 04/12/2008, 12h31
  3. Réponses: 1
    Dernier message: 08/08/2008, 17h12
  4. Réponses: 5
    Dernier message: 31/05/2007, 13h10
  5. Pouvoir gérer les actions des boutons dans une classe
    Par Cyborg289 dans le forum Composants
    Réponses: 2
    Dernier message: 08/07/2005, 12h08

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