9
votes

Pouvez-vous modifier la valeur de configuration des connexions à l'exécution?


3 commentaires

Pourriez-vous expliquer pourquoi vous voudriez basculer la chaîne de base de données / connexion au moment de l'exécution?.


Je migre du contenu d'une ancienne version d'une bibliothèque vers une nouvelle version de la bibliothèque - les deux versions utilisent le même nom de chaîne de connexion, mais je veux lire à partir d'une base de données et écrire dans une autre base de données.


Je viens de réaliser que j'ai écrit web.config dans mon message, je voulais dire app.config (mis à jour pour refléter le changement).


5 Réponses :


0
votes

Pas vraiment sûr pourquoi vous voudriez changer constamment de votre web.config au moment de l'exécution (non recommandé), mais regardez ici pour plus d'informations.

écrire sur .NET web.config

L'essentiel ici est que votre web.config a besoin d'avoir lu et écrit des permisons pour le compte que le processus ASPnet est en cours d'exécution.


1 commentaires

Je ne sais pas pourquoi cela a été évité. Vous avez fourni une recommandation indiquant que ce n'est pas une bonne pratique, et a également fourni une lecture supplémentaire sur le problème de la PO demandée.



18
votes
Configuration myConfiguration = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~"); 
    myConfiguration.ConnectionStrings.ConnectionStrings("myDatabaseName").ConnectionString = txtConnectionString.Text; 
    myConfiguration.AppSettings.Settings.Item("myKey").Value = txtmyKey.Text; 
    myConfiguration.Save(); 
Ref: http://www.beansoftware.com/ASP.NET-Tutorials/Modify-Web.Config-Run-Time.aspx

2 commentaires

+1: Juste une petite modification: Si vous souhaitez relire à nouveau la nouvelle valeur du fichier de configuration sans la nécessité de redémarrer l'application, actualisez le fichier après la sauvegarde en appelant ce qui suit: System.configuration.configurationManager .Refresection ("CONNCIONSTRESSTRESSTRESSIONS");


Cela a fonctionné, bien que j'étais dans une demande de console, je devais donc utiliser une ligne différente: Configuration MyConfiguration = ConfigurationManager.opénexeconfiguration (EXFILEPATH); Notez que cela modifie le fichier de configuration physique.



-1
votes

Je suppose que ce que vous voyez est une erreur de compilateur et non une erreur de temps d'exécution. La classe que vous utilisez est une méthode générée à partir de vos paramètres d'application et les propriétés générées ont uniquement un getter sur la propriété et aucun setter. C'est pourquoi vous recevez cette erreur.

Pour modifier la propriété, vous devez utiliser la classe de configuration et utiliser la propriété AppSettings, en passant dans la chaîne de la clé. Ensuite, vous pouvez appeler la méthode Configuration.Save.


1 commentaires

C'est un raccordstringstting, pas un appSeting, et ce n'est certainement pas une erreur de compilation. Ce qui est bizarre, c'est que la documentation dit que je peux définir la valeur.



-1
votes

Modification de la chaîne de connexion à l'aide du web.config au moment de l'exécution n'est pas recommandée.
Je suggérerais de maintenir ces connexions dans un fichier différent et de mettre en œuvre un fichierwatcher pour vérifier si la valeur de ces paramètres a changé.


0 commentaires

0
votes

La section Connections est réadonnée. Je n'ai besoin de changer que pendant la session, par exemple. Requête de base de données avec un compte en lecture seule et après la validation Update / Modify-Opérations avec un compte accordé.

Donc, ma solution est une section de connexions à la section AppSettings, qui peut être modifiée pendant l'exécution.

Dans web.config: ... "/>

À Sqldatasource:

Et au code: WebconfigurationManager.AppSettings ["dbconnectionstr"] = NEWNONCECITIONSRING;


0 commentaires