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 :

[ADO.NET] Interfaces IDb* et DataAdapter


Sujet :

C#

  1. #1
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut [ADO.NET] Interfaces IDb* et DataAdapter
    Salut,

    Problème :
    Je suis en train d'essayer de développer un Factory de DataSet. Il contient une méthode Create qui prend en paramètre une enum représentant la base sur laquelle se connecter et une chaine de caractères représentant la requête de sélection SELECT.

    Ce qui fonctionne :
    Je dispose déjà d'une méthode ConnectionFactory.Create qui prend en paramètre ce même enum (représentant la base) et qui me renvoie un IDbConnection initialisé à un OracleConnection ou SqlConnection en fonction de l'enum.
    Je dispose aussi d'une méthode CommandFactory.Create qui prend en paramètre encore cet enum et aussi le texte de la requête SQL à exécuter. Cette méthode renvoie un IDbCommand correctement initialisé (en utilisant la méthode IDbConnection.CreateCommand()). Je n'ai donc pas besoin de me préoccuper de SqlCommand ou OracleCommand dans cette méthode, car CreateCommand() encapsule le type en renvoyant directement un IDbCommand.

    Ce que je recherche :
    Je recherche une méthode du même genre que IDbConnection.CreateCommand() mais pour les IDataAdapter, quelquechose du genre CreateDataAdapter().

    Il existe bien DbProviderFactory.CreateDataAdapter(), mais ça ferait un peu double emploi par rapport à ce que j'ai déjà développé.

    Merci à tous.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  2. #2
    Membre chevronné
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Par défaut
    Pas sûr que cela existe pour le DataAdapter.
    En lisant cet article : http://www.ondotnet.com/pub/a/dotnet...ansadonet.html,
    on voit que le problème est le même que pour la Connexion.

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par BCmDev
    Pas sûr que cela existe pour le DataAdapter.
    En lisant cet article : http://www.ondotnet.com/pub/a/dotnet...ansadonet.html,
    on voit que le problème est le même que pour la Connexion.
    C'est bien ce qu'il me semblait... Pour info, voici les changements effectués :
    1. Changement du type de retour de ConnectionFactory.Create en DbConnection à la place de IDbConnection
    2. Utilisation de DbProviderFactory dans la méthode DataSetFactory.Create :
      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
      public DataSet Create(ConnectionType type, string sqlQuery)
              {
                  DbConnection connection = ConnectionFactory.Instance.CreateConnection(type);
                  connection.Open();
       
                  DbProviderFactory factory = DbProviderFactories.GetFactory(connection.GetType().Namespace);
                  DbDataAdapter adapter = factory.CreateDataAdapter();
                  adapter.SelectCommand = factory.CreateCommand();
                  adapter.SelectCommand.Connection = connection;
                  adapter.SelectCommand.CommandText = sqlQuery;
       
                  DataSet data = new DataSet();
                  adapter.Fill(data);
       
                  connection.Close();
       
                  return data;
              }


    Merci de ta réponse.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Salut,

    Tu dois comme même descendre en abstraction. Il te manquerai pas un ptit cast vers SqlCommand ou autre ?

    Pense au modèle provider.

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par mehdi_tn
    Salut,

    Tu dois comme même descendre en abstraction. Il te manquerai pas un ptit cast vers SqlCommand ou autre ?

    Pense au modèle provider.
    Justement l'objectif est de ne pas avoir à caster. Je veux obtenir un code indépendant des objets Sql* ou Oracle*. Je souhaite n'avoir cette spécificité que lors de l'instanciation de mon objet connexion.
    Cela dit, ne trouvant pas de solution correspondant parfaitement à ce que je recherchais au départ, je vais garder la deuxième que j'ai postée.

    Merci de votre aide.
    Allez hop 'résolu'.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  6. #6
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Citation Envoyé par SaumonAgile
    Justement l'objectif est de ne pas avoir à caster. Je veux obtenir un code indépendant des objets Sql* ou Oracle*. Je souhaite n'avoir cette spécificité que lors de l'instanciation de mon objet connexion.
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     DbConnection connection = ConnectionFactory.Instance.CreateConnection(type);

    Elle est là l'instance, il est où le cast ?

    Si tu veux un code indépendant du moteur sgbd, pourquoi utiliser une factory dans ce cas ?

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Je m'ai mal exprimé
    </neuneu>

    En fait il ne s'agit pas d'un factory au sens propre, vu qu'il instancie des objets typés, mais qu'il renvoie des références 'générique' : interfaces ou classes de base.
    Donc ça me permet d'exécuter des opérations sur la base sans tenir compte du SGBD (SQL Server, Oracle, etc).
    Voila pourquoi je ne voulais pas avoir à caster mes objets, et que je recherchais une méthode du même type que IDbConnection.CreateCommand mais pour les DataAdapter.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

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

Discussions similaires

  1. [C++/CLI][ADO.NET] INTERFACE BDD SQL SERVER
    Par orames dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 02/10/2012, 15h24
  2. Problème dataAdapter ADO.NET et service windows
    Par NameX dans le forum VB.NET
    Réponses: 3
    Dernier message: 04/05/2010, 10h13
  3. [ADO.Net][VB.NET][DataAdapter] Comment effectuer l'Update ?
    Par Anubis666 dans le forum Accès aux données
    Réponses: 14
    Dernier message: 19/01/2006, 15h16
  4. [VB.NET] [ADO.NET] DataAdapter et concaténation
    Par master56 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 04/06/2004, 13h25

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