2009-12-02 16 views
10

Wie liest man die Verbindungszeichenfolge aus der app.config-Datei mit .net api?.net 3.5: Um Connectionstring aus app.config zu lesen?

Platform 3.5 .net

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

Antwort

13

Bitte siehe Reading Connection Strings in Web.Config and App.Config and Enterprise Library DAAB Settings (auf der Wayback Machine, da das Original gelöscht wurde)

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

Sie müssen möglicherweise eine Montage Bezug auf System.Configuration

+0

Ich habe weit und breit gesucht und kann den aktualisierten Link zum Tutorial, auf das Sie verweisen, nicht finden. Haben Sie einen aktualisierten Link dazu? – ecoe

+0

@ecoe Ich habe es auf der [Wayback Machine] gefunden (http://web.archive.org/web/20120307192453/http://davidhayden.com/blog/dave/archive/2007/02/22/ReadConnectionStringsWebConfigAppConfig .aspx) – Justin

2

Wenn name ein String-Wert ist, der den Namen der Verbindungszeichenfolge darstellt:

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

In Ihrem Beispiel Sie keinen Wert für name vorsah Also musst du das tun, bevor es funktioniert.

4

In der config:

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

In C# -Code:

using System.Configuration; 

... 

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

Besser wäre noch eine Funktion zu definieren, und es in dem Code verwendet überall:

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

Hier hinzuzufügen ist, was ich tat.

Ich brauchte einen Dienst, um automatisch zu starten und eine Verbindung zu einer MS SQL-Datenbank als Teil seines Starts herzustellen. Dies bedeutet, dass der Name der DB-Verbindungszeichenfolge in der Registrierung gespeichert werden muss und dass die in der Registrierung gespeicherte Zeichenfolge einer definierten Verbindungszeichenfolge entsprechen muss. Die Antwort war ein kleines WinForm-Applet, das den Registrierungsspeicher von Startparametern für den Dienst verwaltete, wobei einer der Speicherparameter der -Name der DB-Verbindungszeichenfolge war.

Ich fügte der von Linq erstellten Datenbankkontextklasse zwei statische Funktionen hinzu. Eine Methode listet DB-Verbindungsnamen auf, die im Abschnitt Einstellungen des DB-Projekts definiert sind. Die zweite Methode gibt mir einen DB-Kontext vom DB-Verbindungsnamen zurück. Das Registrierungsverwaltungs-Applet hat die enumerator-Methode aufgerufen, um das Listenfeld und den Windows-Dienst namens GetDBContextFromConnectionName() zu füllen, um den aus der Registrierung abgerufenen DB-Verbindungsnamen in einen DB-Kontext zu konvertieren. Der DB-Kontext wurde dann für den DB-Zugriff verwendet.

Diese beiden Methoden wurden in eine Klassendatei eingefügt, die ich zum Projekt hinzugefügt hatte und die denselben Namen wie die von Linq erstellte Datenkontextklasse hatte. Das Ergebnis war: ` using System; mit System.Configuration; mit System.Collections.Generic; mit 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; 
     } 
    } 
} 

`

Ich hoffe, das hilft.