.net 3.5: Чтобы прочитать строку соединения из app.config?
Как читать информацию строки соединения из файла app.config с помощью .net api?
Платформа .net 3.5
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add connectionString="" providerName="" name=""/>
</connectionStrings>
</configuration>
Ответы
Ответ 1
См. Чтение строк подключения в настройках DAAB Web.Config и App.Config и Enterprise Library (на Wayback Machine в качестве исходного удален)
ConnectionStringSettings connection = ConfigurationManager.ConnectionStrings["MyConnectionString"]
string connectionString = connection.ConnectionString
Вам может потребоваться добавить ссылку на сборку System.Configuration
Ответ 2
В конфигурации:
<add name="ConnectionName" connectionString="Data Source=xxxx\yyyy;Initial Catalog=MyDB;User ID=userName;Password=pwd" />
В коде С#:
using System.Configuration;
...
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionName"].ToString();
Лучше всего было бы определить функцию и использовать ее в коде везде:
public string getConnectionStringMyDB()
{
return ConfigurationManager.ConnectionStrings["ConnectionName"].ToString();
}
Ответ 3
Если name
- строковое значение, которое представляет имя строки подключения:
var connectionString =
ConfigurationManager.ConnectionStrings[name].ConnectionString;
В вашем примере вы не указали значение для name
, поэтому вам придется это сделать, прежде чем он сработает.
Ответ 4
Вот что я сделал.
Мне нужна была служба для автоматического запуска и подключения к базе данных MS SQL в рамках ее запуска. Это означает, что имя строки подключения DB должно храниться в реестре и что строка, хранящаяся в реестре, должна соответствовать определенной строке подключения. Ответ был небольшим апплексом WinForm, который управлял хранилищем реестра параметров запуска для службы, где одним из параметров storde было имя строки подключения DB.
Я добавил две статические функции в класс контекста базы данных, созданный Linq. Один из методов перечисляет имена соединений DB, определенные в разделе настроек для проекта БД. Второй метод возвращает мне контекст БД из имени соединения с БД. Апплет управления реестром называется методом перечислителя, чтобы заполнить поле списка и службу Windows, называемую методом GetDBContextFromConnectionName(), для преобразования имени подключения к базе данных, полученного из реестра, в контекст БД. контекст БД затем использовался для доступа к БД.
Эти два метода были помещены в файл класса, который я добавил в проект, который имел то же имя, что и класс datacontext, созданный Linq.
В результате получилось:
` использование системы; используя System.Configuration; используя System.Collections.Generic; используя 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;
}
}
}
`
Надеюсь, это поможет.