2009-12-02 3 views
10

Comment lire les informations sur les chaînes de connexion à partir du fichier app.config à l'aide de .net api?.net 3.5: Pour lire la chaîne de connexion depuis app.config?

Platform est .net 3,5

 <?xml version="1.0" encoding="utf-8" ?> 
     <configuration> 
      <connectionStrings> 
       <add connectionString="" providerName="" name=""/> 
      </connectionStrings> 
     </configuration> 

Répondre

13

S'il vous plaît voir Reading Connection Strings in Web.Config and App.Config and Enterprise Library DAAB Settings (sur la Wayback Machine comme l'original a été supprimé)

ConnectionStringSettings connection = ConfigurationManager.ConnectionStrings["MyConnectionString"] 
string connectionString = connection.ConnectionString 

Vous devrez peut-être ajouter une référence d'assemblage à System.Configuration

+0

J'ai cherché loin et ne trouve pas le lien mis à jour vers le tutoriel que vous référencez. Auriez-vous un lien mis à jour? – ecoe

+0

@ecoe Je l'ai trouvé sur la [Wayback Machine] (http://web.archive.org/web/20120307192453/http://davidhayden.com/blog/dave/archive/2007/02/22/ReadConnectionStringsWebConfigAppConfig .aspx) – Justin

2

Si name est une valeur de chaîne qui représente le nom de la chaîne de connexion:

var connectionString = 
    ConfigurationManager.ConnectionStrings[name].ConnectionString; 

Dans votre exemple, vous n'a pas fourni une valeur pour name , donc vous devrez le faire avant que ça marche.

4

Dans la config:

<add name="ConnectionName" connectionString="Data Source=xxxx\yyyy;Initial Catalog=MyDB;User ID=userName;Password=pwd" /> 

Dans le code C#:

using System.Configuration; 

... 

    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionName"].ToString(); 

mieux serait encore de définir une fonction et l'utiliser dans le code partout:

public string getConnectionStringMyDB() 
     { 
      return ConfigurationManager.ConnectionStrings["ConnectionName"].ToString(); 
     } 
0

est ce que je l'ai fait ici.

J'avais besoin d'un service pour démarrer automatiquement et me connecter à une base de données MS SQL dans le cadre de son démarrage. Cela signifie que le nom de la chaîne de connexion DB doit être stocké dans le registre et que la chaîne stockée dans le registre doit correspondre à une chaîne de connexion définie. La réponse était une petite applet WinForm qui gérait le stockage de registre des paramètres de démarrage pour le service où l'un des paramètres storde était le nom de la chaîne de connexion DB.

J'ai ajouté deux fonctions statiques à la classe de contexte de base de données créée par Linq. Une méthode énumère les noms de connexion DB définis dans la section des paramètres du projet DB. La deuxième méthode me renvoie un contexte de base de données à partir du nom de connexion de la base de données. L'applet de gestion de registre a appelé la méthode enumerator afin de remplir la zone de liste et le service Windows appelé GetDBContextFromConnectionName() pour convertir le nom de connexion de base de données récupéré du registre dans un contexte de base de données. le contexte de base de données a ensuite été utilisé pour l'accès à la base de données.

Ces deux méthodes ont été placées dans un fichier de classe I ajouté au projet qui avait le même nom que la classe datacontext créée par Linq. Le résultat a été: ` using System; en utilisant System.Configuration; en utilisant System.Collections.Generic; en utilisant System.Collections;

namespace RepositoryProject 
{ 
    public partial class RepositoryDataContext 
    { 
     /// <summary> 
     /// Return a MS SQL-LINQ DB Context given the name of the DB Connection name defined in 
     /// Properties.Settings.Default area of the SQL-Linq project. 
     /// </summary> 
     /// <param name="dbConnectionName">The name of the prediefined DB Connection string</param> 
     /// <returns>A SQL-Linq database context </returns> 
     public static RepositoryDataContext GetDBContextFromConnectionName(string dbConnectionName) 
     { 
      string fullConnectionString = null; 

      dbConnectionName = dbConnectionName.Trim(); 
      if (!String.IsNullOrEmpty(dbConnectionName)) 
      { 
       SettingsPropertyCollection allConnectionStrings = global::Cognex.TA.Framework.Properties.Settings.Default.Properties; 
       SettingsProperty connectionProperty = allConnectionStrings[dbConnectionName]; 
       if (null != connectionProperty) 
       { 
        fullConnectionString = (string) connectionProperty.DefaultValue; 
        if (String.IsNullOrEmpty(dbConnectionName)) 
        { 
         string msg = ""; 
         msg += String.Format("The connection string name, {0}, exists within the settings of the RepositoryDataContext class but creates an empty DB connection string.", dbConnectionName); 
         throw new ArgumentException(msg); 
        } 
       } 
       else 
       { 
        string msg = ""; 
        msg += String.Format("The connection string name, {0}, does not exist within the settings of the RepositoryDataContext class.", dbConnectionName); 
        throw new ArgumentException(msg); 
       } 
      } 
      else 
      { 
       string msg = ""; 
       msg += "The connection string name to the test repository cannot be null or empty."; 
       throw new ArgumentException(msg); 
      } 

      return new RepositoryDataContext(fullConnectionString); 

     } 

     /// <summary> 
     /// Return a list of all the DB Connection names defined in 
     /// Properties.Settings.Default area of the SQL linq project. 
     /// </summary> 
     /// <returns>A list of DB Connection name</returns> 
     public static List<string> GetAllDBConnectionNames() 
     { 
      List<string> listONames = new List<string>(); 

      /* 
      * within the the Linq-generated code (TestRepository.designer.cs) there is an empty constructor for 
      * the data context which looks similar to this: 
      * 
      * public TestRepositoryDataContext() : 
      * base(global::Framework.Properties.Settings.Default.DefaultConnectionString, mappingSource) 
      * { 
        OnCreated(); 
      * } 
      * 
      * Duplicate that assembly name here 
      */ 
      SettingsPropertyCollection allConnectionStrings = global::Framework.Properties.Settings.Default.Properties; 
      foreach(SettingsProperty entry in allConnectionStrings) 
      { 
       if (entry.PropertyType.ToString().Equals("System.String")) 
       { 
        listONames.Add(entry.Name); 
       } 
      } 

      return listONames; 
     } 
    } 
} 

`

J'espère que cette aide.