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 :

[c#] Appel d'une procédure stockée Record


Sujet :

Accès aux données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Points : 64
    Points
    64
    Par défaut [c#] Appel d'une procédure stockée Record
    Bonjour j'ai une procédure stockée qui me sort en paramètre de sortie un tableau d'enregistrement.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
     
    TYPE T_REC_TEST IS RECORD (
       libelleCTC VARCHAR2(20),
       resteCoupure VARCHAR2(20),
       stock VARCHAR2(20),
       traficTrie VARCHAR2(20),
       tauxReste VARCHAR2(20));
    -- Table de records --
    TYPE TAB_T_REC_TEST IS TABLE OF T_REC_TEST INDEX BY BINARY_INTEGER ;
     
     
     
     
    PROCEDURE P_TB_TEST2(PDI_JOURNEE_POSTALE IN DATE, PTO_TEST OUT TAB_T_REC_TEST)
    IS
        -- curseur
    	v_cur Pkg_Tableaux_Bord_Reste.r_cursor;
     
    	-- variables
    	fileHandler UTL_FILE.FILE_TYPE;
    	resteCoupure INTEGER;
    	stock INTEGER;
    	traficTrie INTEGER;
    	codeCTC CHAR(6);
    	libelleCTC VARCHAR2(20);
    	idCTC INTEGER;
     
    	--PTO_ECO_DEP TAB_T_REC_ECO_DEP;
     
    	indice INTEGER;
     
    BEGIN
     
    	-- Ouverture du fichier de log
    	fileHandler := UTL_FILE.FOPEN('TRC_DIR', 'ECO_DEPART.LOG', 'w');
    	indice := 1;
     
        -- recupération de la liste des établissements
    	P_GET_ETAB_STOCK_RESTE (v_cur,PDI_JOURNEE_POSTALE);
     
     
     
        LOOP
          FETCH v_cur INTO codeCTC , libelleCTC, idCTC;
       	  		EXIT WHEN v_cur%NOTFOUND;
     
     
    		PTO_TEST(indice).libelleCTC := libelleCTC;
     
    		P_GET_RESTE_BY_ETAB (idCTC, -- id du ctc
    		                     '2', -- code catégorie "Ecopli"
    							 1, -- code niveau_tri "Départ"
    							 PDI_JOURNEE_POSTALE,
    							 resteCoupure);
     
    		P_GET_STOCK_MACROPT_BY_ETAB (idCTC, -- id du ctc
    		                             '2', -- code catégorie "Ecopli"
    							 		 1, -- code niveau_tri "Départ"
    							 		 PDI_JOURNEE_POSTALE,
    							 		 stock);
     
    		P_GET_TRAFIC_TRIE_CAT_BY_ETAB (idCTC, -- id du ctc
    		                               '2', -- code catégorie "Ecopli"
    							 	   	   1, -- code niveau_tri "Départ"
    							 	   	   PDI_JOURNEE_POSTALE,
    							 	  	   traficTrie);
     
    		PTO_TEST(indice).resteCoupure := '' || resteCoupure;
    		PTO_TEST(indice).stock := '' || stock;
    		PTO_TEST(indice).traficTrie := '' ||  traficTrie;
     
    		IF (traficTrie IS NOT NULL AND traficTrie != 0) THEN
    		   PTO_TEST(indice).tauxReste := '' ||  (stock /traficTrie);
    		ELSE
    			PTO_TEST(indice).tauxReste := '0';
    		END IF;
     
    		indice := indice + 1;
    	END LOOP;
    	CLOSE v_cur;
     
    	FOR i IN 1..PTO_TEST.COUNT LOOP
    		UTL_FILE.PUT_LINE(fileHandler, ' **** code : ' || PTO_TEST(i).libelleCTC);
    		UTL_FILE.PUT_LINE(fileHandler, ' **** reste : ' || PTO_TEST(i).resteCoupure);
    		UTL_FILE.PUT_LINE(fileHandler, ' **** stock : ' || PTO_TEST(i).stock);
    		UTL_FILE.PUT_LINE(fileHandler, ' **** trie : ' || PTO_TEST(i).traficTrie);
    		UTL_FILE.PUT_LINE(fileHandler, ' **** taux Reste : ' || PTO_TEST(i).tauxReste);
        END LOOP;
     
    	-- Fermeture du fichier de log
    	UTL_FILE.FCLOSE(fileHandler);
     
     
    	EXCEPTION
    	WHEN utl_file.invalid_path THEN
    		 RAISE_APPLICATION_ERROR(-20000, 'Erreur: répertoire / nom de fichier invalide');
    	WHEN OTHERS THEN
    		 RAISE;
     
    END P_TB_TEST2;

    Je cherche à faire appel de cette procédure stockée à partir de mon code C#

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    		public void test2() 
    		{
     
    			OracleConnection myConnection = new OracleConnection();
    			try 
    			{
    				string strConn = "user id=HGADEV_AA5;data source=BOUCLAGE_V3;password=HGADEV_AA5";
    				myConnection.ConnectionString = strConn;
    				myConnection.Open();
     
     
    				OracleCommand cmd = new OracleCommand( "PKG_TABLEAUX_BORD_RESTE.P_TB_TEST2", myConnection);
    				cmd.CommandType=CommandType.StoredProcedure;
     
    				OracleParameter Param1 = new OracleParameter();
    				Param1.OracleDbType = OracleDbType.Date;
    				Param1.Direction = ParameterDirection.Input;
    				Param1.Value= "15/11/2005";
     
     
     
    				OracleParameter Param2 = new OracleParameter();
    				Param2.OracleDbType = OracleDbType.Varchar2;
    				Param2.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
    				Param2.Direction = ParameterDirection.Output;
     
    				Param2.Value = null;
     
     
    				int max = 3;
     
     
    				int maxVarChar = 20;
    				int [] tbOracle = new int[max];
    				for (int i=0; i<tbOracle.Length; i++) 
    				{
    					tbOracle[i]=maxVarChar;
    				}
    				Param2.ArrayBindSize = tbOracle;
     
     
    				cmd.Parameters.Add(Param1);
    				cmd.Parameters.Add(Param2);
     
     
    				cmd.ExecuteNonQuery();
    				System.Console.WriteLine(cmd.Parameters[1].Value);
    			} 
    			catch (Exception ex)
    			{
    				string err = ex.StackTrace;
    			} 
    			finally 
    			{
    				myConnection.Close();
    			}
    		}

    Mais ca ne fonctionne pas très bien car en fait je ne peux pas définir à l'avance le nombre d'éléments de mon tableau d'enregistrement et du coup je ne peux pas renseigner le Param2.ArrayBindSize...

    Est ce que certaines personnes ont déjà réliser ce genre d'appel.

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Bonjour lapartdombre
    Citation Envoyé par La règle du forum
    Utilisation des tags:
    Afin de faciliter la recherche et la navigation sur ce forum, nous avons mis en place un système de tags (Mots clés entre crochets dans les titres des messages). Ces tags ont pour but de déterminer de manière immédiate le langage en question : ...
    voir > http://www.developpez.net/forums/viewtopic.php?t=326092
    Soyez rigoureux quant aux respects des règles du forum, elles vous garantissent également les réponses les plus appropriées à résoudre votre souci, tout en veillant à ne pas incommoder inutilement les professionnels qui donnent benevolement de leur compétence à vous répondre. Veillez à vous mettre en règle en éditant votre post afin de modifier votre titre en conséquence. Je vous remercie de votre attention à maintenir le forum agréable et efficace.
    (Bouton en haut à droite du premier post de ce thread)
    Cordialement

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Désolé mais OracleParameter.ArrayBindSize ainsi que d'autres membres que tu utilises me sont inconnus même dans la framework 2.0
    Utilises tu une bibliothèque particuliere du Client Oracle non native de la framework 2.0

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Dommage, j'ai exactement le même problème..

  5. #5
    Membre régulier Avatar de DoRiane
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 127
    Points : 110
    Points
    110
    Par défaut
    Résolu !!!
    mais quelle est la solution ????

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

Discussions similaires

  1. [AS400] Appel d'une procédure stockée
    Par Portekoi dans le forum DB2
    Réponses: 55
    Dernier message: 26/11/2008, 10h01
  2. Appel d'une procédure stockée
    Par zut94 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/04/2006, 08h54
  3. Appel d'une procédure stockée sous VB 6
    Par Polux000 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/01/2006, 09h21
  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