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

ASP.NET Discussion :

Modification de la connectionString


Sujet :

ASP.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Modification de la connectionString
    Bonjour,

    j'aimerais savoir s'il y a une technique pour modifier une connectionString en cours d'utilisation.

    Présentement je tente de la modifier dans la méthode Application_Start dans le fichier Global.asax.

    L'application me retourne l'erreur que la connectionString est en readonly.
    J'ai aussi essayé de la créer tout simplement plutot que de la modifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Data.SqlClient.SqlConnectionStringBuilder maString = new System.Data.SqlClient.SqlConnectionStringBuilder();
    maString.ConnectionString = "Data Source=Serveur;Initial Catalog=T_Test;Persist Security Info=True; Integrated Security=SSPI";
    Mais je ne peux pas ensuite utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string connectString = ConfigurationManager.ConnectionStrings["maString"].ToString();
    Pouvez-vous m'aider??

  2. #2
    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
    Points : 6 334
    Points
    6 334
    Par défaut
    Pourquoi la mettre dans le web.config, si c'est pour la changer à l'exécution ?
    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

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Parce qu'on a 2 serveurs, un Régulier et un comme backup si le premier tombe.
    Comme je suis sur que les 2 serveurs ne changeront jamais (sauf si on le décide) je veux que ma connectionString me permettre de changer l'utilisation de la BD sans affecter le code, donc, toujours me connecter sur la BD "REGULIER" et si il tombe me connecter automatiquement sur la BD "BACKUP".

    MErci

  4. #4
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Pourquoi ne pas mettre les deux chaines de connexion et switcher en cas de problème ?

  5. #5
    Membre éprouvé Avatar de cubitus91
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 726
    Points : 933
    Points
    933
    Par défaut
    Bonsoir,
    Tu peux tester le status de ta connexion de ton serveur Régulier. Ca donne ca :
    si lors de ton open tu as une execption ou autres, tu prend le deuxieme connectionstring. tu peux aussi tester avec un ping sur le premier, si le serveur régulier tombe il devient down. Donc tu prend le deuxieme.

    Cdt
    Le tag est bien utile, alors pensez y !

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    C'est quand fait la connectionString est utilisé dans la pluspart des classes du projet. Donc, il faudrait changer partout. Et aussi, On a un environnement de test et un environnement de prod qui utilise différent bd. Donc ce que j'aurais voulu c'est:

    • Quand je suis en test, il prend tout seul la BD de test,
    • Quand je suis en prod et que le serveur fonctionne, il prend la BD de prod
    • Quand je suis en prod et que le serveur ne fonctionne pas, il prend la BD de Backup


    Et tout ca sans avoir a modifier le web.config. Puisque que je connais déjà d'avance les serveurs et qu'ils ne changeront pas.

    Merci

  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
    Points : 6 334
    Points
    6 334
    Par défaut
    Tu veux dire que tu n'as pas pris la peine d'écrire une méthode qui te renvoie une connexion initialisée en fonction de l'environnement, et que tu copies partout ta chaine de connexion ?
    Si c'est le cas, tu sais ce qu'il te reste à faire.
    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

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    String GetConnectionSring()
    {
        if (env=="DEV")
               return connectionDEV
     
        if(env=="PROD")
        {
            if(mainServerUp())
                 return connectionPROD
            else
                 return connectionBACKUP
        }
    }
    Pour la variable env, tu peux la déclarer dans le web.config et mettre DEV qd t'es en dev et PROD qd t'es en prod
    Reste à coder la fonction mainServerUp

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Pas de problème avec le fait de mettre une méthode qui gère les connexions quand elles sont utilisé dans le codeBehind c#. Mais quand elles sont utilisé dans un <asp:sqlConnection ... Je ne peux pas passer une fonction dans le paramètre ConnectionStrings comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:SqlDataSource ID="SqlDataSourceNews" runat="server" ConnectionString="<%# Eval(obtenirChaineConnexion().ToString())%>"SelectCommand="SELECT * FROM [News] ORDER BY [date] DESC"></asp:SqlDataSource>

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Points : 332
    Points
    332
    Par défaut
    Le mieux est effectivement d'en avoir deux. Mais sinon, tu devrais pouvoir faire la modification en utilisant WebConfigurationManager.ConnectionStrings["toto"].ConnectionString = "NewString" non ?
    Pierre-Emmanuel Dautreppe
    .NET Architect & Evangelist
    Voir mes expériences, tutoriels, news, ... concernant .NET, XP et le TDD :
    http://www.pedautreppe.com

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    En fait présentement je fais:

    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
            XMLWriter objXMLWriter = new XMLWriter();
     
            if (Server.MachineName == s_prod)
            {
                if (DataSource != s_prod) 
                {
                    objXMLWriter.writeConfig(c_prod);
                }
            }
            else
            {
                if (DataSource != s_backup)
                {
                    objXMLWriter.writeConfig(c_test);
                }
            }
    et la méthode writeConfig fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public void writeConfig(string chaine)
        {
            Configuration config = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
            ConnectionStringsSection conSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
            conSection.ConnectionStrings["T_HomingMatrix"].ConnectionString = chaine;
            config.Save(); 
     
        }
    Normalement, c'est supposé redémarré l'application, il n'y a pas de probleme puisque que j'effectue ca dans le fichier Global.asax. Mais dans mon cas ca ne redémarre pas...

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Points : 332
    Points
    332
    Par défaut
    Je fais la même chose (plus ou moins) mais sur d'autres sections.
    Si tu regardes le code de ConnectionStringsSection.GetRuntimeObject, tu vas voir un beau "this.SetReadOnly()"...
    ça risque d'être plus dur...
    Pierre-Emmanuel Dautreppe
    .NET Architect & Evangelist
    Voir mes expériences, tutoriels, news, ... concernant .NET, XP et le TDD :
    http://www.pedautreppe.com

Discussions similaires

  1. Modification App.config ConnectionStrings
    Par ppphil dans le forum C#
    Réponses: 0
    Dernier message: 17/11/2009, 16h15
  2. [c#] Modification d'une connectionString dans le programme
    Par toopac dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/07/2009, 17h22
  3. Réponses: 4
    Dernier message: 15/12/2007, 18h23
  4. Réponses: 1
    Dernier message: 18/07/2007, 17h37
  5. Réponses: 11
    Dernier message: 23/07/2002, 14h33

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