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

C# Discussion :

[.NET Oracle] Passage d'un tableau en paramètre d'une requête


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de NeraOne
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 218
    Par défaut [.NET Oracle] Passage d'un tableau en paramètre d'une requête
    Salut les loulous !

    Je travaille sur .NET en C# et je développe une bibliothèque géométrique basée sur NetTopologySuite. Je récupère et je sauvegarde mes géométries sur une base Oracle Spatial (Oracle 10g).
    Je rencontre un soucis qui peut très vite être bloquant pour mon appli. Je sais pas si vous connaissait la structure d'un objet Oracle Spatial : SDO_GEOMETRY, mais bon à la limite c'est pas grave... Si j'ai un polygone défini par 10 000 points par exemple (chose qui n'est pas rare du tout), je peux pas caler mes 10 000 points directement dans la requête par une concaténantion, car Oracle me jette en me disant : Too many arguments. Par sécurité, j'ai vérifier la taille des tableaux de points que supporte Oracle : 1 048 576 occurences... donc c'est pas ça qui gène. Je pense qu'au dela d'un certains nombre de caractères, Oracle n'accepte plus la requête, je ne sais pour quelle raison !
    Ce que je voudrais faire : au lieu de passer toute la chaîne de points directement, passer en paramètre un tableau de points pour pas que le Text de la requête explose et pour que je puisse passer autant de points que je veux !
    Je n'ai absolument aucune idée de comment je pourrai faire cela... MaiS : je sais que ça existe, enfin je connaîs l'homme qui a vu l'homme qui a vu l'homme qui a vu l'ours le faire
    Si certains pouvez m'eclairer la dessus, ce serait cool ! Merci beaucoup et @+
    Antoine

  2. #2
    Membre éclairé Avatar de NeraOne
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 218
    Par défaut
    Je précise également que, pour des raisons de performence, j'utilise le "driver" fait par Oracle : Oracle.DataAccess et non pas celui de Microsoft : System.Data.OracleClient.
    J'ai regardé du côté de la classe OracleParameterCollection mais je n'arrive pas du tout à la faire fonctionner... J'ai créer un tableau de OracleParameter mais bon, il n'empêche qu'au final je suis obligé de lister dans la requête le nom de chaque paramètres, je peux en mettre plus car je met des nom cours mais bon, ce n'est que repousser le problème...

    Pas d'idée ?¿

  3. #3
    Membre éclairé Avatar de NeraOne
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 218
    Par défaut
    Ralalala je suis blazé, je suis parti vendredi en me disant que j'aurai une réponse lundi matin puis rien... Personne n'a jamais réussi à passer un tableau en paramètre à une requête Oracle ???????????????? Please Help Me

    @++
    Antoine

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    Sisi tu peux passer des tableaux, mais tu ne peux pas utiliser n'importe quelle collection oracle.
    Regarde l'exemple sur le site du driver odp.net. Par exemple :

    Using PL/SQL Associative Arrays
    http://www.oracle.com/technology/ora...an/o17odp.html

  5. #5
    Membre éclairé Avatar de NeraOne
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 218
    Par défaut Re
    Merci de ta réponse karlus mais je ne préfére pas faire cela en PL/SQL ni avec des procédures stockées d'abord parce que je ne maîtrise pas du tout cela et ensuite parce que c'est assez lourd (on m'a dit que...) !
    Je voudrais vraiment, si cela existe, queuq'choz d'pluusssss béïzik (spécial dédicace au têtes à claques ).
    Pour passer un paramètre, on fait cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    OracleConnection conn = new OracleConnection(); //Connexion
    OracleCommand requete = new OracleCommand(); //Requête
    OracleParameter param = requete.Parameters.Add(new OracleParameter(":param", OracleDbType.Double)); //Paramètre
    requete.CommandText = ("select * from TEST where cle = :param"); //Texte de la requête
    param.Value = 51;
    //Et après on exécute !
    Moi je voudrais un truc du même genre en fait mais sauf que le param ce serai un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    OracleConnection conn = new OracleConnection(); //Connexion
    OracleCommand requete = new OracleCommand(); //Requête
    OracleParameter param = requete.Parameters.Add(new OracleParameter(":param", OracleDbType.???)); //Paramètre de type tableau
    requete.CommandText = ("select * from TEST where cle = :param"); //Texte de la requête
    param.Value = monTableau; //monTableau que je définis avant...
    //Et après on exécute !
    Ca existe ça avec Oracle 10G sans passé par des procédures stockées, aussi simple que ça ?????
    Merci d'avance !
    ++
    Antoine

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Par défaut
    A ma connaissance non. Mais pour ma part une requête avec une clause where ... in ( , , , ) avec 10000 paramètres j'essaierai de l'éviter.
    Tu devrais peut être quand même jeter un oeil sur les collections PL/SQL. Ca pourrait peut être t'éviter ce type de requête et puis c'est pas si lourd que ça

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/09/2007, 13h38
  2. Réponses: 6
    Dernier message: 24/07/2006, 15h22
  3. Procédure stockée : passage d'un tableau en paramètres
    Par thomas_strass dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 12/05/2006, 14h52
  4. [JpGraph] Passage d'un tableau en paramètre dans une URL pour JPgraph
    Par crazydiver_e2 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 16/01/2006, 16h15
  5. Réponses: 7
    Dernier message: 18/05/2005, 15h09

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