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

Accès aux données Discussion :

appel d'une procédure stocké en asp.net


Sujet :

Accès aux données

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut appel d'une procédure stocké en asp.net
    bonjour;
    comment pui-je appeler cette procédure en asp.net:

    create procedure recherche
    (
    titre IN varchar,resultat OUT cv%Rowtype

    )
    is

    BEGIN
    SELECT * INTO resultat FROM touhami.cv
    WHERE metier LIKE titre ;
    end;

    le probleme est lors de l'appel avec la variable resultat de type cv%rowtype
    sinon j'appelle commeca et sa fonctionne

    MonParametre2 = MaCommande.Parameters.Add("resultat", OleDbType.VarChar, 20)

    MonParametre2.Direction = ParameterDirection.Output

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    et la balise code?

    ensuite, tu dis que tu fais "comme ca" et que ca marche alors quel est ton problème?
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    mon sa marche quand je declare la variable resultat dans ma procédure stocké comme etant varchar

    mais ma variable resultat dans la procédure et de type cv%rowtype

    comment je vai faire l'appel dans mon code avec ce type la

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    pourquoi utilises-tu "OleDbType". n'as-tu pas un provider plus spécialisé pour ton SGBD? oledb ne s'utilise qu'en dernier recours normalement.

    ensuite tu donnes aucune info sur le type de base. tu serais en oracle par exemple, tu pourrais utiliser un refcursor plutot que rowtype
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    j'utilise oracle 9i

    jai essayé avec un ref cursor mais j'ai aucun resultat

    voici mon code de procédure

    create or replace procedure P_listeproduit (titre in varchar,resultat out varchar) is

    cursor c_listeprod is
    select objectif from touhami.cv where metier like titre;



    begin
    -- Ouverture du curseur
    open c_listeprod;

    -- Début Boucle
    loop
    -- Rapatriement de l'enregistrement du curseur
    fetch c_listeprod into resultat;

    -- Test de fin du curseur avec sortie de boucle
    if c_listeprod %notfound then
    exit;
    end if;

    -- Test du curseur
    dbms_output.put_line(resultat);

    --Fin Boucle
    end loop;

    -- Fermeture du curseur
    close c_listeprod;
    end;

  6. #6
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    quand tu tapes un message, merci d'utiliser le bouton avec le dièse dessus et de mettre ton code dedans


    ensuite, ca ne s'utilise pas comme cela en oracle si tu veux retourner un resultset (note: y a que oracle qui fait ch**r comme ca )
    Il te faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create or replace procedure P_listeproduit (titre in varchar,resultat out refcursor) is
    begin
      OPEN resultat FOR
          SELECT * FROM matable;
     
    end;
    c'est tout.

    ensuite, la subtilité c'est que ExecuteQuery ou non query ou autre ne te retournera jamais rien.

    il faut recupérer depuis .Net la value de ton paramètre. cad tu crées un paramètre, tu le set à null, tu le passe à ta sp, tu execute la sp qui ne fait que modifier cet "objet" puis tu reprend cet objet et tu l'utilises.

    moi je fais comme cela (j'utilise ma propre DAL donc tu n'auras pas exactement la même chose mais ma DAL n'est qu'une surcouche des objets oracle donc tu peux pareil)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dbManager.Open();
                    dbManager.CreateParameters(3);
                    dbManager.AddOracleParameters(0, "cur", "cursor", null); // il faut le setter à null
                    dbManager.AddOracleParameters(1, "p_usr", "number", UsrID);
                    dbManager.AddOracleParameters(2, "p_filename", "nvarchar", alertFile);
                    dbManager.Parameters[0].Direction = ParameterDirection.Output;
                    dbManager.ExecuteNonQuery(CommandType.StoredProcedure, "pkg_alerts.sp_getalertforexo");
    
                    dbManager.DataReader = (IDataReader)dbManager.Parameters[0].Value; // je te le récupère
                    return dbManager.getDataReaderDataTable(); // avec le datareader, tu fais ce que tu veux, ici je récupère un objet DataTable
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    merci pour votre aide
    il faut declarer avant le refcursor
    j'ai fai comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     CREATE OR REPLACE PACKAGE types
       AS
           TYPE refcursor IS REF CURSOR;
        END types;
    mais tu peu stp m'éclaircir l'idé de la surcouche oracle
    comment je peu utiliser dbManager
    rq:je developpe en asp.net(vb.net)
    merci

  8. #8
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    la surcouche t'en a pas besoin, je l'ai crée pour mes propres besoins.
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    ok sans probleme mais j'utilse vb.net dans mon code behind;
    apparament c'est du c#
    quesque je dot modifier parceque la vraiement j'ai du mal a le comprendre

    merci ,j'apprecie vraiement ton aide

  10. #10
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    tu n'as quasi rien à changer. tu ne dois pas prendre mon code mais le tien.

    tu as bon objet command, tu lui ajoute un parametre (ca tu sais faire)
    tu fais ton execute (tu sais faire)
    et puis te recuperes ton parametre (via son index par exemple). tu le cast en datareader et puis après, c'est du ADO.net tout ce qu'il y a de plus basique
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  11. #11
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    oui je comprend
    j'ai un peu de confusion

    voici mon code appelant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim MaChaineDeConnection As String = "provider = MSDAORA ; data source = recrut;User ID=touhami;Password=glmaster;Unicode=True"
            Dim MaConnexion As New OleDbConnection(MaChaineDeConnection)
            Dim MaRequete As String = "recherche_simple"
            Dim MaCommande As New OleDbCommand(MaRequete, MaConnexion)
            MaCommande.CommandType = CommandType.StoredProcedure
            Dim MonParametre, MonParametre2 As OleDbParameter
            MonParametre = MaCommande.Parameters.Add("titre", OleDbType.VarChar, 100)
            MonParametre.Value = "%" & titre.Text & "%"
            MonParametre2 = MaCommande.Parameters.Add("resultat", OleDbType.VarChar, 20)
     
            MonParametre2.Direction = ParameterDirection.Output


    est ce que je doit modifier uniquement cette ligne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonParametre2 = MaCommande.Parameters.Add("resultat", OleDbType.VarChar, 20)
    si oui comment stp

  12. #12
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    1- en utilisant un provider Oracle et pas oledb. t'imagines même pas la perte de performance, ca peut être du 400% ou plus
    2- en declarant un type refcursor
    c'est tout
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  13. #13
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    tien voila
    c'est exactement ce que je cherche
    comment et ou declarer le refcursor dans mon code behind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MonParametre2 = MaCommande.Parameters.Add(0, "resultat", "cursor", Nothing)
    en utlilisant ca j'ai le message suivant
    Conversion from string "resultat" to type 'Integer' is not valid.

    merci variement
    j'espere que sa sera résolu apres sa

  14. #14
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    alors vous avez une idée

  15. #15
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    minute papillon, on a le droit d'avoir une vie à côté donc pas de "up". ensuite, tant que tu n'utiliseras pas un provider oracle, ca ne sert à rien d'aller plus loin, tu ne pourras pas.
    je pense que tu aussi assez grand pour chercher sur google comment utiliser un refcursor en .Net

    on est là pour aider, pas pour écrire le code à ta place, sinon tu n'apprendras pas :/
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  16. #16
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    vous n'avez aucune idé sur le temp que j'ai passé sur google pour la recherche

    bon le provider oracle est supposé fai

    je veu juste avoir une idée comment declarer un refcursor en asp.net

  17. #17
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    déjà si tu cherches pour de l'"asp.net", tu ne trouveras rien.
    une DB ne dépend que ce soit web ou non donc il faut chercher .Net

    ensuite, le premier lien t'explique tout ce qu'il faut
    http://www.google.fr/search?q=refcur...ient=firefox-a
    le deuxieme lien aussi et le troisieme mais pas le quatrieme. par contre le cinquieme explique aussi
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  18. #18
    Candidat au Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    merci du fond du coeur

    c'est résolu

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/11/2014, 09h45
  2. Réponses: 1
    Dernier message: 03/09/2009, 12h39
  3. Réponses: 6
    Dernier message: 19/07/2007, 16h48
  4. Réponses: 2
    Dernier message: 10/12/2004, 15h43
  5. Appel d'une procédure stockée par un vbscript
    Par NicoNours dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/10/2004, 13h53

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