NETSAGE
Messages postés32Date d'inscriptionmercredi 11 août 2004StatutMembreDernière intervention11 mars 2008
-
19 déc. 2006 à 09:10
NETSAGE
Messages postés32Date d'inscriptionmercredi 11 août 2004StatutMembreDernière intervention11 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 ?
Gwendal3
Messages postés60Date d'inscriptionsamedi 4 mars 2006StatutMembreDernière intervention15 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
/// <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;
NETSAGE
Messages postés32Date d'inscriptionmercredi 11 août 2004StatutMembreDernière intervention11 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.
NETSAGE
Messages postés32Date d'inscriptionmercredi 11 août 2004StatutMembreDernière intervention11 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.