Précédent   Forum du club des développeurs et IT Pro > Dotnet > Langages > C#
C# Forum d'entraide sur la programmation C#. Avant de poster -> FAQ C#, Articles C#, Sources C#
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/11/2012, 22h47   #1
r83
Membre du Club
 
Inscription : mars 2003
Messages : 240
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 240
Points : 47
Points : 47
Par défaut mapper collection<string> sur paramètre tableau oracle PLSQL

Bonjour,

environnement C# vs2012/ Oracle 11G.
Je stocke des chaines dans une collection C# (collection<string>), et je dois passer cette collection en paramètre à une procédure stockée Oracle qui adment en paramètre un tableau (type tstrings IS TABLE OF varchar(50) INDEX BY pls_integer range 0..9

Je n'y arrive pas ....

ça marche quand j'envoie depuis C# un tableau de strings (String[]), mais cette solution ne me convient pas car je ne conanis pas à priori la taille de mon tableau.
Si quelqu'un a une solution ....
Merci
r83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 00h26   #2
youtpout978
Membre Expert
 
Homme John Doe
Développeur .NET
Inscription : novembre 2010
Messages : 911
Détails du profil
Informations personnelles :
Nom : Homme John Doe
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 911
Points : 1 457
Points : 1 457
Bonsoir,
tu as la méthode ToArray() sur les listes qui te permet de retourner ta liste sous la forme d'un tableau.
youtpout978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 08h49   #3
loustalet
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 106
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 106
Points : 30
Points : 30
Essaye avec ce bout de code qui marche :

Code :
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
 
        public void TestCollection()
        {            
            try
            {
                Collection<String> chaine = new Collection<string>();
                chaine.Add("Chaine1");
                chaine.Add("Chaine2");
                UneOracleCommand = new OracleCommand("pckparticipant.test", CnOracle);
                UneOracleCommand.CommandType = CommandType.StoredProcedure;
                OracleParameter pcollection = new OracleParameter();
                pcollection.ParameterName = "unecollection";
                pcollection.Direction = ParameterDirection.Input;
                pcollection.OracleDbType = OracleDbType.Varchar2;
                pcollection.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
                pcollection.Value = chaine.ToArray();
                pcollection.Size = chaine.Count;
                UneOracleCommand.Parameters.Add(pcollection);
                UneOracleCommand.ExecuteNonQuery();
            }
            catch (OracleException Oex)
            {
                MessageBox.Show("Erreur Oracle \n" + Oex.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Autre Erreur  \n" + ex.Message);
            }
        }
Et côté PLSQL :
Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
CREATE OR REPLACE
package body pckparticipant
IS
erreur exception;
 procedure  Test(unecollection IN tdates)
IS
erreur exception;
begin
  FOR i IN unecollection.FIRST .. unecollection.LAST 
  LOOP
      INSERT INTO test VALUES (unecollection(i));
  END LOOP;
exception
    when erreur then
      raise_application_error(-20099, 'test erreur');
end;
end pckparticipant;

ça devrait marcher !
loustalet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2012, 23h40   #4
r83
Membre du Club
 
Inscription : mars 2003
Messages : 240
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 240
Points : 47
Points : 47
Merci beaucoup loustalet, le code marche impéccable.
Bon we
r83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h06.


 
 
 
 
Partenaires

Hébergement Web