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

Linq Discussion :

Procedure stokée retournant plusieurs valeurs


Sujet :

Linq

  1. #1
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut Procedure stokée retournant plusieurs valeurs
    Bonjour,

    Je bloque sur un truc qui doit être tout simple, mais ne touvant rien qui puisse m'aider, je fais appel à vous.

    J'ai une procédure stokée qui crée une table temporaire, ajoute des valeurs dedans, et fais un select dessus à la fin des insertions.

    Grosso modo elle ressemble à ça :
    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
     
    -- table temporaire qui va reçevoir les valeurs
    CREATE TABLE #TOTO  (Val varchar(8000))
     
     
    WHILE condition
    BEGIN
    	INSERT INTO #TOTO (Val) 
    		VALUES (@Valeur)
    	SET @Valeur = ...
    END
     
    SELECT Val FROM #TOTO
    	ORDER BY Val asc
     
    DROP TABLE #COUNTER_VALUES
    Côté C# et visual Studio, j'ai créé une classe LINQ to SQL (Test), j'ai glissé la procédure stockée en question dans le Method Pane du designer.

    Ensuite voici le code que j'ai écrit pour obtenir le résultat de l'appel de cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    List<string> rslt = new List<string>();
     
    TestDataContext dtCntxt = new TestDataContext (ConfigurationManager.AppSettings.Get("sqlConnectionString"));
     
    var query = dtCntxt.ProcédureStockée1(arg1, arg2, ...);
     
    foreach (var c in query)
    {
    	rslt.Add(c.ToString());   
    }
    Le problème c'est que le type de retour de ma procédure est un int. Qui n'est dons pas ennumerable, et qui ne contient donc qu'une seule valeur (et est ici toujours égale à 0).

    La porcédure réalisant d'autres traitement, j'ai pu vérifée qu'elle était bien exécutée. Le vrai problème c'est que je n'arrive pas à récupérer les valeurs retournées.

    Dans les propiétés de la pocédure stockée (dans le designer) la valeur de Return Type est '(None)'.
    ça vient peut être de là, mais je ne peux pas modifier cette valeur.

    Avez vous une idée pour que je puisse récupérer le résultat de mon Select?

    Merci

  2. #2
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Il s'agit en fait d'un bug de Visaul Studio, qui n'arrive pas à détecter le type de retour.

    Pour "corriger" ce problème, il faut forcer visual studio à détecter ce type de retour.
    Pour ça il faut faire un peu de bricolage :

    • Commenter tout le corps de la porcédure stockée
      Et ajouter uniquement ces deux lignes
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      Select Val=cast('nimportequoi' as varchar(8000))
      RETURN;
    • Retourner ensuite sous visual studio,
      suppimer la pocédure de la classe linq to sql.
    • Rafraichir l'explorateur de serveur, et glisser à nouveau la procédure dans le Method Pane du designer.
      cette fois Visual stutio ci détecte bien le type de retour.
    • supprimer les deux lignes pécédemment insérées dans la porcédure en question, et décommenter le code
    • et voilà tout fonctionne.


    Le code C# est alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    List<string> rslt = new List<string>();
     
    TestDataContext dtCntxt = new TestDataContext ();
     
    var query = dtCntxt.ProcédureStockée1(arg1, arg2, ...);
     
    foreach (var c in query)
    {
    	rslt.Add(c.Val.ToString());
    }
    Ceci est bien sûr à adapter en fonction des cas.

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

Discussions similaires

  1. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  2. [Trigger] - retourné plusieurs valeurs ?
    Par jacquesh dans le forum Oracle
    Réponses: 18
    Dernier message: 12/12/2007, 13h49
  3. Réponses: 8
    Dernier message: 06/04/2006, 18h45
  4. Fonction retournant plusieurs valeurs
    Par Trap D dans le forum Scheme
    Réponses: 1
    Dernier message: 17/02/2006, 21h52
  5. [PL/SQL] Fonction qui retourne plusieurs valeurs
    Par Loko dans le forum Oracle
    Réponses: 2
    Dernier message: 07/12/2004, 09h43

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