.net 3.5: читать строку подключения из app.config? - PullRequest
10 голосов
/ 02 декабря 2009

Как прочитать информацию о строке подключения из файла app.config, используя .net api?

Платформа .net 3.5

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

Ответы [ 4 ]

13 голосов
/ 02 декабря 2009

См. Чтение строк подключения в настройках DAAB Web.Config и App.Config и Enterprise Library (на Wayback Machine после удаления оригинала)

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

Возможно, вам потребуется добавить ссылку на сборку в System.Configuration

4 голосов
/ 02 декабря 2009

В конфиге:

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

В коде C #:

    using System.Configuration;

...

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

Еще лучше было бы определить функцию и везде использовать ее в коде:

public string getConnectionStringMyDB()
        {
            return ConfigurationManager.ConnectionStrings["ConnectionName"].ToString();
        }
2 голосов
/ 02 декабря 2009

Если name - это строковое значение, представляющее имя строки подключения:

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

В вашем примере вы не указали значение для name, поэтому вам придется сделать это до того, как оно заработает.

0 голосов
/ 23 августа 2012

Вот что я сделал.

Мне нужно было, чтобы служба запускалась автоматически и подключалась к базе данных MS SQL при ее запуске. Это означает, что имя строки подключения к БД должно храниться в реестре, а строка, хранящаяся в реестре, должна соответствовать определенной строке подключения. Ответом был небольшой апплет WinForm, который управлял хранением реестра параметров запуска службы, где одним из параметров storde было имя строки подключения к БД.

Я добавил две статические функции в класс контекста базы данных, созданный Linq. Один метод перечисляет имена соединений с БД, определенные в разделе настроек для проекта БД. Второй метод возвращает мне контекст БД из имени подключения БД. Апплет управления реестром вызвал метод перечислителя, чтобы заполнить список, а служба Windows - метод GetDBContextFromConnectionName () для преобразования имени соединения с БД, полученного из реестра, в контекст БД. контекст БД затем использовался для доступа к БД.

Эти два метода были помещены в файл класса, который я добавил в проект и который имеет то же имя, что и класс datacontext, созданный Linq.

Результат был: ` используя Систему; используя System.Configuration; using System.Collections.Generic; using 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;
        }
    }
}

`

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...