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

Windows Forms Discussion :

[c#] Modification d'une connectionString dans le programme


Sujet :

Windows Forms

  1. #1
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut [c#] Modification d'une connectionString dans le programme
    Bonjour,

    Je développe un programme qui viens chercher des informations stockées dans des bases de données.

    Il y a tellement d'information qu'une base est crée chaque mois.

    La base en cours s'appelle BDD, et les précédentes sont nommées sous le format suivant : "BDD_jj_MM_yyyy" (jj : dernier jour du mois).

    Mon problème est que je n'arrive pas à changer ma chaine de connexion pour accéder à une autre base de donnée pendant l'exécution du programme.

    Après plusieurs recherches, j'ai fait le code suivant :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    [...]
        majConnectionString(debut, fin);
        Class1 class1 = new Class1();
        string[] donnees = class1 .getDonnees(debut, fin);
    [...]
     
     
    private void majConnectionString(DateTime debut, DateTime fin)
    {
        string bdd;
        if (!debut.Month.Equals(DateTime.Today.Month))
        {
            bdd = "BDD_";
            bdd += DateTime.DaysInMonth(debut.Year, debut.Month) + "_" + debut.ToString("MM") + "_" + debut.Year;
        }
        else
        {
            bdd = "BDD";
        }
        int i;
        Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        for (i = 0; i < config.ConnectionStrings.ConnectionStrings.Count; i++)
        {
            if (config.ConnectionStrings.ConnectionStrings[i].Name.Contains("BDDConnectionString"))
            break;
        }
        try
        {
            ConnectionStringSettings oldConnex = config.ConnectionStrings.ConnectionStrings[i];
            config.ConnectionStrings.ConnectionStrings.Remove(oldConnex);
        }
        catch (Exception err) { }
        ConnectionStringSettings newConnex = new ConnectionStringSettings("MON_PROJET.Properties.Settings.BDDConnectionString", "Data Source=SOURCE;Initial Catalog=" + bdd + ";User ID=USER_ID;Password=PASSWORD");
        config.ConnectionStrings.ConnectionStrings.Add(newConnex);
        config.Save(ConfigurationSaveMode.Modified);   
    }
    Mais cela ne marche pas comme je le voudrais :
    en cours d'exécution, le fichier "MON_PROJET.exe.config" est bien modifié.
    Mais je n'arrive à accéder qu'à la base dont la chaine de connexion était dans le fichier MON_PROJET.exe.config avant l'exécution du programme.

    En réalité ça "marche", mais il faut que je quitte le programme à chaque fois.
    Ce qui n'est premièrement pas vraiment pratique, mais surtout très problématique si je veux fait une requête à cheval sur deux mois (ou même sur plusieurs mois).

    Avez vous une solution, ou au moins une piste à exploiter?

    Merci d'avance

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par toopac Voir le message
    Il y a tellement d'information qu'une base est crée chaque mois.
    ??? tu utilises quelle base de données ???

    Pour ton problème, tu ferais mieux, a ce moment la, de stocker dans ton fichier de config seulement les informations "stables" de ta chaine de connexion (user, password, serveur), et de générer ta chaine de connexion a l'exécution....

    Le fait d'avoir la possibilité de stocker la chaine de connexion dans le fichier de config ne signifie pas que tu ne dois faire que comme cela

  3. #3
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    ??? tu utilises quelle base de données ???
    J'utilise Microsoft SQL Server (SqlClient).

    Le fait d'avoir la possibilité de stocker la chaine de connexion dans le fichier de config ne signifie pas que tu ne dois faire que comme cela
    C'est que comme cela que je sais faire...

  4. #4
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Avec SQL Server, je n'ose pas imaginer la quantite de donnees que tu manipules si tu fais une bdd/mois (en telecom, ou on stocke pas mal de donnees, on a des bases de donnees qui tiennent la charge sans avoir besoin d'etre splitees)

    Ceci mis a part, dans ton web.config, tu ajoutes un appsetting, comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <add key="databaseConnectionMask" value="Data Source=SOURCE;Initial Catalog=<DBNAME>;User ID=USER_ID;Password=PASSWORD" />
    et pour créer tes chaines de connection, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private string GetConnectionString(DateTime debut, DateTime fin){
     
        string dbMask = ConfigurationManager.AppSettings["databaseConnectionMask"];
     
        string bdd = "BDD";
        if (!debut.Month.Equals(DateTime.Today.Month)){
            bdd += "_"+ DateTime.DaysInMonth(debut.Year, debut.Month) + "_" + debut.ToString("MM") + "_" + debut.Year;
        }
     
        return dbMask.Replace("<DBNAME>",bdd );
    }
    Et dans les fonctions qui appellent la base de donnees (ou "la" fonction, si possible), tu récupères la chaine de connectino a partir de GetConnectionString

  5. #5
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Citation Envoyé par Philippe Vialatte Voir le message
    Avec SQL Server, je n'ose pas imaginer la quantite de donnees que tu manipules si tu fais une bdd/mois (en telecom, ou on stocke pas mal de donnees, on a des bases de donnees qui tiennent la charge sans avoir besoin d'etre splitees)
    Un peu plus d'1 million d'entrées pour chaque tables (au nombre de 4), ayant chacune 27 champs.
    (et quand on sait que 99.9% des données ne servent à rien...)
    De toute façon j'y peu pas grand chose, je suis juste stagiaire, alors je fais avec ce que j'ai....


    Je ne pense pas que je vais avoir le temps de tester ça aujourd'hui, mais je te remercie pour ta réponse.

    Par contre je ne fais pas de la programmation web, donc pas de balises ni de web.config, mais je vais essayer d'adapter.

    Je reviens demain quand j'aurai eu le temps de m'en occuper.

    Merci encore

  6. #6
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    4 million d'entrées par moi, c'est pas énorme, énorme

    (apres, ce serait access ...)

    Citation Envoyé par toopac Voir le message
    Par contre je ne fais pas de la programmation web, donc pas de balises ni de web.config, mais je vais essayer d'adapter.
    C'est pareil avec le app.config

    ...et la balise, c'est juste un token pour ne pas remplacer n'importe quoi

  7. #7
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Points : 2 913
    Points
    2 913
    Par défaut
    Bon grâce à tes indications et à d'autres recherches, j'ai quelque chose qui marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void majConnectionString(DateTime debut, DateTime fin)
    {
        string bdd = "BDD";
        if (!debut.Month.Equals(DateTime.Today.Month))
        {
            bdd += "_"+DateTime.DaysInMonth(debut.Year, debut.Month) + "_" + debut.ToString("MM") + "_" + debut.Year;
        }       
        MON_PROJET.Properties.Settings.Default["BDDConnectionString"] = "Data Source=SOURCE;Initial Catalog=" + bdd + ";User ID=USER_ID;Password=PASSWORD";
    }
    Merci encore pour tes réponses.

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

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 00h54
  2. Réponses: 33
    Dernier message: 28/04/2010, 04h44
  3. Faire une pause dans le programme
    Par shinobi dans le forum Access
    Réponses: 6
    Dernier message: 13/06/2005, 16h37
  4. Integrer une musique dans mon programme
    Par Tutux84 dans le forum C
    Réponses: 2
    Dernier message: 29/01/2005, 12h41
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

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