Connection a des BD différentes

NETSAGE Messages postés 32 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 mars 2008 - 19 déc. 2006 à 09:10
NETSAGE Messages postés 32 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 mars 2008 - 23 févr. 2007 à 16:39
Bonjour à tous et toutes



Je voudrais créer une class qui me permet de construire la ConnectionString dynamiquement avec la possibilité de choisir sa BD, son serveur et le domain par des choix sur des ListBox. Or, je
n'arrive pas a trouver le moyen, ou comment construire ces listes.
En claire, quelles sont les fonctions ou class qui me permettent d'obtenir ces infos pour les charger
dans les listebox ?

Si vous avez une idée, elle sera la bien venue.

Merci à tous et toutes, cordialement

3 réponses

Gwendal3 Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 15 août 2011
15 janv. 2007 à 22:15
Salut,

Regarde du côté de dbProviderFactory

Voilà !

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Common;
using System.Configuration;
using System.Data;
using System.Collections;
using System.Reflection;
using System.Transactions;

namespace Bewise.Data
{
    /// <summary>
    /// Classe d'acces générique à une base de donnée dont le Proivder existe
    /// </summary>
    public class Generic
    {

        #region Propriétés privée ConnectionString : A Paramétrer

        private static string connectionString = "ConnectionString";

        #endregion

        #region Propriétés Privées

        private static ConnectionStringSettings connectionStringSettings;
        private static ConnectionStringSettingsCollection connectionStringsCollection;
        private static DbProviderFactory dbProviderFactory;
        private static bool cacheEnabled = true;
        private static DbCommand currentCommand;
        private static TransactionScope transactionScope;

        #endregion

        #region Propriétés Publiques

        /// <summary>
        /// Provider d'acces aux données
        /// </summary>
        public static DbProviderFactory DbProviderFactory
        {
            get
            {
                return dbProviderFactory;
            }
        }

        /// <summary>
        /// Chaine de connexion
        /// </summary>
        public static String ConnectionString
        {
            get
            {
                return connectionString;
            }
            set
            {
                connectionString = value;
            }
        }

        /// <summary>
        /// Récupère la commande courante
        /// </summary>
        public static DbCommand CurrentCommand
        {
            get
            {
                return currentCommand;
            }
        }

        #endregion

        #region Constructeur de la classe d'acces aux données Generic

        /// <summary>
        /// Constructeur de ma classe Static
        /// </summary>
        static Generic()
        {
            // Récupération de toutes les chaines de connexion
            connectionStringsCollection = ConfigurationManager.ConnectionStrings;

            // Récupération de la classe fabrique suivant le provider
            dbProviderFactory = DbProviderFactories.GetFactory(connectionStringsCollection[0].ProviderName);

        }

        #endregion

        #region Gestion de la connexion récupérer depuis un Setting

        /// <summary>
        /// Crée une connexion depuis le fichier de configuration
        /// </summary>
        /// <returns>Objet implementant DbConnection</returns>
        public static DbConnection GetConnection()
        {
            return GetConnection(ConnectionString);
        }

        /// <summary>
        /// Crée une connexion depuis le fichier de configuration
        /// </summary>
        /// <returns>Objet implementant DbConnection</returns>
        public static DbConnection GetConnection(String connectionString)
        {
            // Création de la connection
            DbConnection conn = dbProviderFactory.CreateConnection();

            // Récupération de la chaine de connexion
            connectionStringSettings = connectionStringsCollection[connectionString];

            // Affectation de la chaine de connexion
            conn.ConnectionString = connectionStringSettings.ConnectionString;

            // retour de la connexion
            return conn;
        }

        #endregion

        #region Création d'un dbCommand (et affectation à la commande courante)
        /// <summary>
        /// Créer un objet Command
        /// </summary>
        public static DbCommand CreateDbCommand(String commandText, DbConnection connection, CommandType commandType)
        {
            DbCommand command = dbProviderFactory.CreateCommand();
            command.CommandType = commandType;
            command.CommandText = commandText;
            command.Connection = connection;

            currentCommand = command;

            return command;

        }

        /// <summary>
        /// Créer un objet Command : Surcharge
        /// </summary>
        public static DbCommand CreateDbCommand(String commandText, CommandType commandType)
        {
            DbCommand command = dbProviderFactory.CreateCommand();
            command.CommandType = commandType;
            command.CommandText = commandText;
            command.Connection = GetConnection();

            currentCommand = command;

            return command;

        }
        #endregion
0
NETSAGE Messages postés 32 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 mars 2008
22 janv. 2007 à 11:28
Salut a tous et toutes;



Je pense avoir trouver une solution qui marche. L'idée est l'utilisation du DataLink qui est fournit en standard lors de l'installation de Windows (Voir les outils dans le panneau de configuration Système...). Donc, par programmation j'ai fais appel au DataLink. L'utilisateur peut ainsi paramètrer la connection string avec les provider et les bases dont il dispose. Le DataLink retourne alors la connection string que je split. Ainsi j'obtiens les segments et selon le segment provider je déclare les connections, les commandes et ainsi de suite (Voir IDBconnection pour plus d'info). Maintenant je réaliser la couche DLA indépendament du Provider et de la BD.


J'ai trouvé cette idée en croisant des recherches sur le net.  Merci a Gwendal3 pour sa réponse.

NET-SAGE
0
NETSAGE Messages postés 32 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 mars 2008
23 févr. 2007 à 16:39
Bonjour a tous;

EURIKA,

Avez-vous-compris, eh oui j'ai trouvé. Et du faite que vous êtes sympa je vous donne la solution que j'ai choisis

1 - J'ai utilisé le DataLink via vb.net pour récupérer la chaine de connection.
     (Cela permet d'être indépendant de la base)
2 - J'ai hasché la chaine obtenu en couple (cle/valeur) dans une haschtable.
     (Parmis ces couples il y a le couple (Provider/Valeur)
3 - J'ai déclaré dans le fichier de config de l'appli tous les segments d'une
      connection string sans les valeurs de chaque provider (SqlClient, OracleClient,....)
4 - Selon le provider que le DataLink ma founit, je récupere a partir du fichier config 
     les  segments qu'il faut pour la connection string.
5 - Je cherche ensuite les valeurs dans la haschtable pour chaque paramètre que j'ai
     recupéré dans le fichier config pour construire la connectionString.

Voilà le tour est joué et ça marche ?

Salut

NET-SAGE
0
Rejoignez-nous