2010-09-23 17 views
9

J'ai un assembly C# qui utilise app.config pour stocker sa chaîne de connexion à la base de données. Lors du débogage de l'application, j'ai remarqué que la connexion à la base de données continuait à échouer parce que le ConfigurationManager continuait à renvoyer la chaîne de connexion machine.config:ConfigurationManager continue d'obtenir la chaîne de connexion Machine.config

source de données =. \ SQLEXPRESS; Sécurité intégrée; ....

J'ai ajouté <clear/> avant ma chaîne de connexion dans le fichier app.config et il a résolu le problème sur ma machine dev. Le problème est revenu lorsque je l'ai déployé en production. Quelqu'un peut-il me dire comment je peux empêcher l'utilisation de la chaîne de connexion machine.config?

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[0].ConnectionString); 

<connectionStrings> 
    <clear/> 
    <add name="VersionConnectionString" 
    connectionString=" Data Source=localhost;Initial Catalog=VersionInfo;User ID=user;Password=password"   
    providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

MISE À JOUR

Ce qui suit me donne encore la chaîne de connexion machine.config ?!

Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
       string dllConfigData = 
        appConfig.ConnectionStrings.ConnectionStrings[0].ConnectionString; 
+0

Je sais que c'est un ancien article, mais je suis toujours curieux, est-ce une application de bureau ou de console? Est-ce que vous voyez la section de chaîne de connexion avec l'élément clear dans le répertoire de sortie (bin)? –

+0

J'ai toujours le problème dans mon application. J'ai ajouté clair, ou utilisé les codes ci-dessous et copier le fichier de configuration dans le dossier exe, mais il est toujours aller chercher des données par défaut. J'utilise VS2015. – Amir

+0

J'ai eu le même problème. J'ai eu la bonne chaîne de connexion dans le projet 'class library' que j'ai utilisé et j'ai laissé le 'web.config' vide dans le projet 'Web'. Dès que j'ai ajouté la même chose dans le projet web, ça a bien fonctionné pour moi. Juste au cas où vous avez plusieurs projets dans une solution – Sugafree

Répondre

1

Essayez d'obtenir une instance de votre fichier app.config comme un objet de configuration:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

var myConnString = config.ConnectionStrings["VersionConnectionString"].ConnectionString; 

Cela permet de contourner complètement le fichier de configuration de la machine.

+0

Ceci est une bibliothèque de classes (.dll) OpenExeConfig se lève et exception. Bonne idée cependant. – Nick

+4

Cela ne semble pas réellement contourner la config de la machine –

0

Vous devriez obtenir votre chaîne de connexion par nom au lieu de INDEX - ce qui vous assurera que vous obtenez ce que vous demandez.

Essayez

SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["VersionConnectionString"].ConnectionString); 
+0

vous obtenez votre chaîne de connexion machine.config quand vous l'obtenez par nom? –

4

Lors de l'utilisation des chaînes de connexion dans une DLL, vous devez les ajouter à la app.config de votre exe ainsi, en utilisant le même nom pour le réglage. Ensuite, vous pouvez modifier la chaîne de connexion dans le fichier .config de l'exe et la DLL le récupérera automatiquement une fois chargée.

Il s'agit probablement de la seule façon d'utiliser des chaînes de connexion personnalisées dans le fichier app.config lorsque votre couche de persistance DB est implémentée dans une DLL distincte. Ne me demandez même pas combien de temps cela m'a pris pour rechercher et déboguer cela.

2

Je sais que c'est une question plus ancienne, mais j'avais le même problème aujourd'hui. Le problème était que le app.config que j'avais ajouté à mon projet n'était pas copié dans le répertoire de sortie. Pour résoudre ce problème, faites un clic droit sur le app.config et sélectionnez Properties. Ensuite, remplacez Build Action par Content. J'espère que cela aide!