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 :

[2.0][VB.NET] Comment charger un DataSet avec une procédure stockée Oracle ?


Sujet :

Accès aux données

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut [2.0][VB.NET] Comment charger un DataSet avec une procédure stockée Oracle ?
    Bonjour,

    je suis en train de travailler à la réalisation d'un nouveau site Web qui doit pouvoir fonctionner avec Sql Server 2005 et Oracle 9.
    Je souhaite charger mes données à l'aide de procédures stockées.
    Je suis arrivée à créer un DbDataAdapter et à remplir un DataTable à l'aide d'une procédure stockée Sql.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE PROCEDURE [PS_GET_DETAILS_LOCALISATION]
    @nomTable VARCHAR(50),
    @id VARCHAR(50)
    AS
    SELECT * FROM VW_LOCALISATION_UP
    WHERE ID = cast(@id as int)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Function getLocalisationDatatable(ByVal sp As String, ByVal ParamArray parameters() As Object) As DataTable
     
        Dim dataAcces As New GenericAccess.Data
        Dim da As DbDataAdapter
        da = dataAcces.CreateDataAdapter(CommandType.StoredProcedure, sp, Nothing, Nothing, Nothing, parameters)
        Dim dt As New DataTable
        da.Fill(dt)
        Return dt
    End Function
    Je n'arrive pas à faire l'équivalent avec Oracle.
    Dois-je faire une fonction qui retourne un curseur ou est-il possible d'utiliser un paramètre IN/OUT ?

    Merci par avance de votre aide.

  2. #2
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    dans les procédure oracle tu dois avoir un curseur en paramètre de sortie. en fait c'est ce paramètre qui va te permettre de recuperer les données de oracle...

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    ben en fait c'est ce que j'avais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE OR REPLACE PROCEDURE PS_GET_DETAILS_LOCALISATION
    (NOM_TABLE IN VARCHAR2,
    ID_TABLE IN VARCHAR2,
    io_cursor OUT LP_LOCALISATION.C_ST_LOCALISATION )
    AS
    BEGIN
    OPEN io_cursor FOR
    SELECT ID, CODE, DESI FROM aii.VW_LOCALISATION_UP
    WHERE ID = TO_NUMBER(ID_TABLE);
    END;
    /
    Show errors
    Quand j'execute mon code VB (qui fonctionne bien pour Sql) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim DB As GenericDatabase = Outils.getDB
    Dim cmd As DbCommand
    Dim dr As IDataReader
     
    cmd = DB.GetStoredProcCommand(sp)
    DB.AddInParameter(cmd, "nomTable", DbType.String, parameters(0))
    DB.AddInParameter(cmd, "id", DbType.String, parameters(1))
    dr = DB.ExecuteReader(cmd)
    J'obtiens le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ORA-06550: Ligne 1, colonne 7 :
    PLS-00306: numéro ou types d'arguments erronés dans appel à 'PS_GET_DETAILS_LOCALISATION'
    Je comprends bien que je n'ai pas déclaré le paramètre de sortie qui doit correspondre à mon curseur mais comment l'affecter à mon DataReader ?

  4. #4
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    ah j ai oublié de préciser.. tu dois les mettre dans un package...

    c'est la seule solution que j'ai trouvé pour que ça marche... :-D


    La declaration des elements du package....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create or replace PACKAGE generato AS
      type t_cursor IS ref CURSOR;
     
      PROCEDURE LOGIN_CONTROL(p_username in number, p_password in number,OutData OUT t_cursor);
      procedure GET_ARTICLE_LIST( OutData OUT t_cursor) ;
     
     
    END generato;
    et ici tu as le corps des procédures....


    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
    create or replace PACKAGE BODY generato AS
     -----------------------------------------------------------------------
     
    --    PROCEDURE LOGIN_CONTROL(p_username in integer,p_password in integer, OutData OUT t_cursor) IS
    PROCEDURE LOGIN_CONTROL(p_username in number, p_password in number,OutData OUT t_cursor) IS
      BEGIN
     
        OPEN OutData FOR
    	SELECT     operators.code, operators.passcode,
                        operators.description,
                        permission_profiles.access_level
            FROM        operators INNER JOIN
                        permission_profiles ON
                        operators.permission_profile_id = permission_profiles.id
            WHERE     (operators.code = p_username) AND (operators.passcode = p_password)
          ;
     
      END LOGIN_CONTROL;
      ------------------------------------------------------------------------
        PROCEDURE GET_ARTICLE_LIST(OutData OUT t_cursor) IS
      BEGIN
     
        OPEN OutData FOR
     
            SELECT     articles.code,
                       articles.description,
                       groups.description as "Groups",
                       pricelevels.description AS pricelevel,
                       prices.price
     
            FROM         articles INNER JOIN 
                         groups ON articles.group_a_id = groups.id INNER JOIN
                         prices ON articles.id = prices.article_id INNER JOIN
                         pricelevels ON prices.pricelevel_id = pricelevels.id;
     
      END GET_ARTICLE_LIST;

    J'espère que tu va t'en sortir avec cet exemple...

    bonne journée

  5. #5
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    ah mais tu dois ajouter ton curseur en paramèetre dans ton code VB avant d executer ta procedure...

    c est important ça et oublies surtout pas de le mettre en sortie...

    un petit exemple en C# mais tu sauras adapter j'en suis sur..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    OracleParameter pp = _cmd.CreateParameter() as OracleParameter;
                    pp.OracleType = OracleType.Cursor;
                    pp.ParameterName = "outData";
                    pp.Direction = ParameterDirection.Output;
                    _cmd.Parameters.Add(pp);

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut
    Merci infiniment Bossun, j'avais le package mais il me manquait le bout de code pour passer mon curseur en paramètre.
    Tu viens de me délivrer de 3 jours de recherches !
    Bonne journée à toi aussi

  7. #7
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    AH je sais ce que c'est.. j'y ai perdu autant moi aussi.. mais mtn je ne risque plus d'oublier comment faire :-D


    Content d'avoir pu t'aider...

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,
    Je cherche également à me connecter à partir d'une page ASP à une procédure stockée Oracle avec un curseur en paramètre de sortie.
    Quel est le code en VB pour lui préciser que ce paramètre est un curseur ?

  9. #9
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 112
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    voici tout le bout de code que j'ai utilisé pour ajouter mon paramètre de sortie de type curseur Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim param As OracleParameter = CType(command.CreateParameter, OracleParameter)
     param.ParameterName = parameterName
     param.OracleType = OracleType.Int16
     param.Direction = ParameterDirection.Output
     command.Parameters.Add(param)
    A ta dispo si tu as besoin d'informations complémentaires.

  11. #11
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci pour ton aide.
    Je n'ai pas réussi à utiliser ton code dans ma page ASP.

    Finalement, j'ai trouvé.
    Je cherchais quelque chose de bien compliqué alors que finalement c'est tout simple.
    Je fais comme d'habitude pour déclarer tous les autres paramètres et puis je mets tout simplement le résultat de ma requête dans mon recordset:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	set rs = server.CreateObject ( "ADODB.Recordset" ) 
    	rs.open = ProcStock.execute
    Bonne journée

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 44
    Points : 45
    Points
    45
    Par défaut OledbConnection
    Bonjour,

    J'ai créé un package avec une procédure pour récupérer les données d'une requête.

    Le hic, c'est que je n'utilise pas OracleConnection mais OledbConnection.
    Je ne trouve pas de type Cursor dans OledbType.

    Avez-vous une solution à me proposer ?

    Merci.

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 28/10/2009, 16h19
  2. Réponses: 1
    Dernier message: 04/05/2006, 10h45
  3. Réponses: 2
    Dernier message: 14/04/2006, 11h20
  4. [ADO.NET][VB.NET]Comment mettre à jour BDD avec DataSet?
    Par fuhraih dans le forum Accès aux données
    Réponses: 1
    Dernier message: 17/01/2006, 16h35
  5. Réponses: 5
    Dernier message: 13/10/2005, 10h49

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