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 :

Pb avec les classes factories pour récupérer la liste des tables d'une base de donnée


Sujet :

Accès aux données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Pb avec les classes factories pour récupérer la liste des tables d'une base de donnée
    Bonjour,

    Voilà avec une connection OleDbConnection classique j'arrive à récupérer une DataTable qui représente la liste des tables d'une base de données quelconque avec une commande du type :

    dbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { db.Catalogue, db.Schema, null, "TABLE" });

    J'aimerais trouver l'équivalent en utilisant les classes factories mais je n'y arrive pas. Quelqu'un à-t-il une idée ?

    Ce que je fais je créé un provider factory

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
    Ensuite je créé ma connection avec ma chaine de connection j'obtiens donc une DbConnection en faisant par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DbConnection dbConnection = factory.CreateConnection();
    dbConnection.ConnectionString = "Data Source=AUCD0080\\SQLEXPRESS;Initial Catalog=AdventureWorks;Integrated Security=True";
    dbConnection.Open();
    Ensuite je créé un DbDataAdapter pour essayer de trouver les tables de la base avec la commande "SELECT * FROM INFORMATION_SCHEMA.TABLES" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DbDataAdapter adapter = factory.CreateDataAdapter();
    adapter.SelectCommand = CreateCommand("SELECT * FROM INFORMATION_SCHEMA.TABLES");
    Je rempli un DataSet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataSet ds = new DataSet();
    adapter.Fill(ds);
    adapter.SelectCommand.Connection.Close();
    Je parcoure enfin la liste des tables dans le DataSet via la collection Tables mais bien sur comme vous vous en doutiez je n'ai pas la liste des tables de la base alors comment faire pour avoir l'équivalent de la fonction GetOleDbSchemaTable en utilisant les classe factories ?

    Merci d'avance.
    Sirile

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    Si tu utilises des bases SQL Server;


    Tu peux te servir des SMO (Il faudra probablement que tu trouves les références dans les libs de SQL Server)

    using Microsoft.SqlServer.Management.Smo;

    Ca te permet après de faire des petites choses comme :
    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
     
    public static void BufferDatas(string _dbname)
            {
                Database db = LocalServer.Databases[_dbname];
                DbTables = db.Tables;
                foreach (Table t in db.Tables)
                {
                    TableColumns.Add(t.Name, t.Columns);
                    TableIndexes.Add(t.Name, t.Indexes);
                    TableList.Add(t.Name);
     
                    foreach (Index i in t.Indexes)
                    {
                        if (i.IndexKeyType == IndexKeyType.DriPrimaryKey)
                        {
                            TablePrimaryKeys.Add(t.Name, i.IndexedColumns);
                        }
                    }
                    TableFK.Add(t.Name, t.ForeignKeys);
                }
            }
    Et de façon bien plus fiable.

    Cerise sur la gateau, toutes les collections sont dispos en DataTable si tu en as besoin.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/11/2008, 07h33
  2. Récupérer la liste des indexes d'une base
    Par Najdar dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/07/2008, 12h15
  3. Réponses: 3
    Dernier message: 23/05/2008, 11h45
  4. Afficher les nom des tables d'une base de donnée
    Par newmar dans le forum Administration
    Réponses: 4
    Dernier message: 02/04/2008, 16h40
  5. Réponses: 11
    Dernier message: 12/05/2006, 17h18

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