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 :

Problème de dataset


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 97
    Par défaut Problème de dataset
    Bonjour, je ne suis pas sur que ca soit le meilleur sous forum pour ma question veuillez m'en excuser.

    J'ai un WebService qui possède une méthode
    string Login(string login, string password)

    La méthode utilise une procédure stockée (fonction en vrai) dans ma db sql server 2005

    Le problème est que je n'arrive pas a récuperer la valeur de retour de ma fonction stockée( elle retourne 0 ou 1 en cas de succès/echec).

    Voici ma WebMethod:

    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
    35
    36
    37
     
    [WebMethod]
        public string Login(string username, string password)
        {
            // va construire une requete transac sql qui va appeler
            // la fonction stockée CheckLoginEmp
     
            //Chaine de connextion à la DB
            SqlConnection sqlCon = new SqlConnection(WebConfigurationManager.ConnectionStrings["CnxStr"].ConnectionString);
            sqlCon.Open();
            //Commande d'appel de la fonctio stockée
            SqlCommand sqlCmd = new SqlCommand("CheckLoginEmp", sqlCon);
            //Un dataAdapter qui contiendra le résultat de la fonction appelée
            SqlDataAdapter MonAdapter = new SqlDataAdapter();
            MonAdapter.SelectCommand = sqlCmd;
     
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.Parameters.Add("p_Login", SqlDbType.VarChar, 20).Value = username;
            sqlCmd.Parameters.Add("p_pwd", SqlDbType.VarChar, 20).Value = password;
     
            sqlCmd.ExecuteNonQuery();
     
            DataSet Resultat = new DataSet();
     
            MonAdapter.Fill(Resultat);
     
     
     
          /*  if ( Resultat.ToString().CompareTo("0") == 0 )
                return "0";
            else
                return "1";
            */
     
            return Resultat.ToString();
     
        }
    Lorsque je test ma Webmethod directement, j'obtient ceci:

    <?xml version="1.0" encoding="utf-8" ?>
    <string xmlns="http://tempuri.org/">System.Data.DataSet</string>

    Ce qui n'est pas du tout ce que je veux, je veux savoir si le login password sont ok ou pas ...

    Merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Il n'y a pas de surcharge par défaut de ToString() pour la classe DataSet : elle retourne alors le nom de la classe (comme l'implémentation par défaut de Object.ToString()). C'est donc normal d'obtenir "System.Data.DataSet".

    Tu peux donc : lire la seule et unique valeur de ton DataSet ... Resultat.Tables[0].Rows[0][0] (...) ou utiliser plutôt ExecuteScalar (ce qui risque d'être bien plus performant dans ce cas que l'initialisation d'un DataAdapter, d'un DataSet et un Fill) sur ton SqlCommand pour récupèrer via le cast approprié la valeur retournée par ta procédure stockée dans une variable.

  3. #3
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    Dans ton cas tu as besoin d'une valeur 1 ou 0.

    Il serait plus judicieux d'exécuter la methode ExecuteScalar de ton objet SqlCommand.

    Ainsi tu ferais just

    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
    [WebMethod]
        public string Login(string username, string password)
        {
            // va construire une requete transac sql qui va appeler
            // la fonction stockée CheckLoginEmp
     
            //Chaine de connextion à la DB
            SqlConnection sqlCon = new SqlConnection(WebConfigurationManager.ConnectionStrings["CnxStr"].ConnectionString);
            sqlCon.Open();
            //Commande d'appel de la fonctio stockée
            SqlCommand sqlCmd = new SqlCommand("CheckLoginEmp", sqlCon);
     
     
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.Parameters.Add("p_Login", SqlDbType.VarChar, 20).Value = username;
            sqlCmd.Parameters.Add("p_pwd", SqlDbType.VarChar, 20).Value = password;
     
            return sqlCmd.ExecuteScalar().toString(); 
        }

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Ton dataset ici est absolument inutile : en effet, tu cherches à retourner une donnée unique (le résultat de l'exécution de ta proc stockée), et il n'y a aucune raison d'utiliser un dataset pour cela.

    Comme le dit bossun, utilise plutôt un ExecuteScalar qui est précisément prévu pour ce cas là.

    Néanmoins, même avec le DataSte tu dois récupérer ton résultat dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Resultat.Tables[0].Rows[0][0]
    Je ne comprends pas bien pourquoi tu utilises la méthode ToString ici.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 97
    Par défaut
    Je ne savais pas que la méthode n'est pas surchargée, merci pour l'info.

    Maintenant j'ai un autre problème, je n'arrive pas à tester la Web Method, je test avec le Service.asmx dans le browser, il trouve ma webmethode me demande les paramtres, mais quand je fais Appeler, il m'affiche erreur http 500 :s

    Je suis avec visual studio 2005.
    Je ne comprend pas j'ai une autre méthode Hello (prédéfinie en créant un WS) qui fonctionne parfaitement.

  6. #6
    Membre Expert Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Par défaut
    Erreur HTTP 500 - Erreur de serveur interne
    Le serveur Web n'est pas en mesure de traiter la requête. Veuillez réessayer ultérieurement.
    Veuillez contacter l'administrateur du serveur Web si le problème persiste.

    Erreur HTTP 500.12 - Redémarrage de l'application
    La page que vous essayez de consulter connaît un problème et ne peut être affichée.

    Erreur HTTP 500.13 - Serveur trop occupé
    La page que vous essayez de consulter connaît un problème et ne peut être affichée.

    Erreur HTTP 500.15 - Demandes Global.asa interdites
    La page que vous essayez de consulter connaît un problème et ne peut être affichée.

    Erreur HTTP 500-100.asp - Erreur ASP
    La page que vous essayez de consulter connaît un problème et ne peut être affichée.


    ESt-ce que ton WebService est démarré?

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 97
    Par défaut
    En fait cela cachait une erreur à la connexion vers ma base de donnée (je suis passé par l'iis de mon os et plus par celui de visual, ca m'a permit de voir la vraie erreur).

    Merci bcp en tout cas !

Discussions similaires

  1. [VB.NET 2003] Problème de Dataset
    Par Kropernic dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/09/2007, 14h14
  2. VB 2005 + Problème Update Dataset
    Par ghostlxl dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/03/2007, 14h12
  3. Problème création dataset
    Par Rudya dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 12/12/2006, 20h16
  4. [VB.NET]Problèmes avec DataSet
    Par Irish dans le forum ASP.NET
    Réponses: 5
    Dernier message: 08/12/2006, 13h06
  5. [JFreeChart] Problème de Dataset
    Par Floréal dans le forum 2D
    Réponses: 4
    Dernier message: 11/05/2006, 16h33

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