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 :

Connexion générique aux bases


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut Connexion générique aux bases
    Bonjour,

    J'ai un projet qui utilise pour l'instant une base Oracle. Je voudrais passer ce projet en connexion générique, comme j'ai lu sur le net et notamment :
    http://johannblais.developpez.com/tu...acces-donnees/

    J'ai implémenté la connexion en utilisant IDbConnection et j'ai réussi à me connecter.

    Par contre j'ai un problème pour l'utilisation des procédures stockées utilisées dans le projet.
    J'ai bien changé les OracleCommand, OracleParameter ou encore OracleDbType en IDbCommand, IDataParameter ou DbType mais j'ai un problème pour récupérer un paramètre OUT en VARCHAR2.

    J'ai une erreur de longueur de chaine. J'ai reproduit cette erreur avec le provider Oracle en enlevant la propriété Size de OracleParameter
    Le code Oracle qui marche est le suivant :
    Or la propriété Size n'est pas défini dans IDataParameter.

    Comment faire pour que ca marche en générique ?
    Ou alors, c'est que la méthode utilisée avec OracleParameter n'est pas exactement la bonne ?

    Merci de m'éclairer

  2. #2
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    J'ai en partie résolu mon problème
    En fait j'utilisais IDataParameter et non IDbDataParameter
    Donc j'arrive maintenant à appeler la procédure stockée

    Mais par contre, j'ai un problème de récupération des paramètres OUT.
    Ce code qui marche parfaitement avec une connexion Oracle ne marche pas avec IDbConnexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim intCodeRetour As Integer = CInt(cmdProcedure.Parameters("onum_CODE_RETOUR").Value)
    J'ai un message
    L'Option Strict ON rejette toute liaison tardive
    Je ne comprends pas pourquoi

  3. #3
    Membre éprouvé Avatar de Capitaine Kirk
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Par défaut
    Bonjour

    Il faudrait je pense procéder à une conversion explicite dans ce style là (de tête):



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim intCodeRetour As Integer = CType(cmdProcedure.Parameters("onum_CODE_RETOUR").Value,Integer)

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut, les accès "génériques" aux bases de données, c'est un peu le Saint Graal des développeurs, mais malheureusement ça a ses limites.
    Si tu ne fais que du SQL pur (sans la moindre trace de T-SQL, de PL/SQL) ça peut le faire avec des frameworks tsl qu'ADO.NET, par contre si tu commences à parler paramètres de procédures stockées tu vas forçément arriver à un moment donné à parler de types, conversions vers types CLR etc et là c'est le drame (tiens, pour t'amuser, essaie de récupérer des champs DATE dans une procédure stockée avec la méthode méthode depuis SQL Server, Oracle et MySQL...).
    Bref, je te conseillerais de mettre la partie "générique" un peu plus haut dans l'abstraction, et de faire su code spécifique à chaque cible pour tous tes appels appels directs aux bases. Ce qui te permettra notamment de profiter des merveilleuses possibilités des langages propriétaires style Transact-SQL ou PL/SQL. Il y a un moment ou les projets du monde réel, les délais etc. te font oublier les Graals... tu risques de passer plus de temps à créer tes accès génériques que tu n'en aurais passé à faire trois fois la même chose pour trois moteurs de BDD différents (vécu !)

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Par défaut
    Merci pour ces réponses.

    Je crois que finalement, je vais suivre le conseil de MetalGeek.
    Je m'étais emballé à vouloir faire du générique.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2009, 20h43
  2. Réponses: 3
    Dernier message: 19/09/2008, 18h04
  3. Réponses: 5
    Dernier message: 21/10/2005, 22h25
  4. Mysql Configuration nombre de connexion aux bases de données
    Par Thierry8 dans le forum Installation
    Réponses: 2
    Dernier message: 15/09/2005, 20h54

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