Получить строку подключения из App.config

380
var connection = ConnectionFactory.GetConnection(
    ConfigurationManager.ConnectionStrings["Test"]
    .ConnectionString, DataBaseProvider);

И это мой App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="Test" connectionString="Data Source=.;Initial Catalog=OmidPayamak;Integrated Security=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

Но когда мой проект запускается, это моя ошибка:

В экземпляре объекта не задана ссылка на объект.

Мохам ад Джафари
источник
5
Где вы положили этот App.config? Проект приложения, которое вы запускаете или, может быть, какой-то DLL? Сначала нужно
абатищев
3
Добавьте ссылку на System.Configuration.dll, и вы сможете использовать System.Configuration.ConfigurationManager.
daszarrin
Ваша строка подключения содержит опечатку. Вам нужен пробел между «Интегрировано» и «Безопасность»
Онур Омер
@OnurOmer - вопрос был обновлен и теперь содержит пробел («Интегрированная безопасность» вместо «Интегрированная безопасность»)
SlimsGhost

Ответы:

484

Не могли бы вы просто сделать следующее:

var connection = 
    System.Configuration.ConfigurationManager.
    ConnectionStrings["Test"].ConnectionString;

Ваша сборка также нуждается в ссылке на System.Configuration.dll

Duffp
источник
14
Я знаю, что это вопрос C #, но так как это верхняя часть результатов поиска Google, чтобы сделать это в VB, это System.Configuration.ConfigurationManager.ConnectionStrings("Test").ConnectionStringдля тех из нас, кто должен поддерживать код VB
JFA
296

Поскольку это очень распространенный вопрос, я подготовил несколько снимков экрана из Visual Studio, чтобы было легко выполнить их в 4 простых шага.

получить строку подключения из app.config

Фредрик Гаусс
источник
22
Люблю этот ответ. По умолчанию в моей версии VS (VS2012 Ultimate) эта библиотека не включена, но по- using System.Configurationпрежнему работает
Дэвид Колвелл,
3
Я действительно ДОЛЖЕН добавить ссылку, или использование не было подчеркнуто, но ConfigurationManager все еще неизвестен. Спасибо!
CodingYourLife
33
string str = Properties.Settings.Default.myConnectionString; 
gjijo
источник
1
Что если app.config будет добавлен в качестве ссылки на проект?
FrenkyB
2
Это будет работать только в том случае, если ваша строка подключения является настройкой приложения, и не будет работать, если извлекать <connectionStrings>элементы из app.config (это то, что запрашивает OP!).
BrainSlugs83
31

Также проверьте, что вы включили System.Configurationdll под вашими ссылками. Без этого у вас не будет доступа к ConfigurationManagerклассу в пространстве имен System.Configuration.

Карл Генрих Ханке
источник
22

Сначала добавьте ссылку System.Configurationна свою страницу.

using System.Configuration;

Затем в соответствии с вашим app.config получите строку подключения следующим образом.

string conStr = ConfigurationManager.ConnectionStrings["Test"].ToString();

Вот и все, теперь у вас есть строка подключения в вашей руке, и вы можете использовать ее.

Тапан Кумар
источник
16
//Get Connection from web.config file
public static OdbcConnection getConnection()
{
    OdbcConnection con = new OdbcConnection();
    con.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["con"].ConnectionString;
    return con;     
}
Гобинд Мандал
источник
6

Попробуйте это

string abc = ConfigurationManager.ConnectionStrings["CharityManagement"].ConnectionString;
vishu9219
источник
3

1) Создайте новую форму и добавьте это:

Imports System.Configuration
Imports Operaciones.My.MySettings

Public NotInheritable Class frmconexion

    Private Shared _cnx As String
    Public Shared Property ConexionMySQL() As String
        Get
            Return My.MySettings.Default.conexionbd
        End Get
        Private Set(ByVal value As String)
            _cnx = value
        End Set
    End Property

End Class

затем, когда вы хотите использовать соединение, сделайте это в форме ur:

 Private Sub frmInsert_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim cn As New MySqlConnection(frmconexion.ConexionMySQL)
cn.open()

и это все. Вы будете подключены к БД и можете делать вещи.

Это для vb.net, но логика та же.

OREO
источник
3

Ты пытался:

var connection = new ConnectionFactory().GetConnection(
    ConfigurationManager.ConnectionStrings["Test"]
    .ConnectionString, DataBaseProvider);
Влад Безден
источник
3

Я была такая же проблема. Мое решение было построено из двух проектов. А Class libraryи веб-сайт, ссылающийся на проект библиотеки классов. проблема была в том, что я пытался получить доступ к App.configсвоему Class libraryпроекту, но система искала Web.configна сайте. Я положил строку подключения внутри Web.configи ... проблема решена!

Основная причина заключалась в том, что, несмотря на то, что ConfigurationManagerон использовался в другой сборке, он искал в проекте runnig.

AmiNadimi
источник
3

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

using System; 
using System.Configuration;

private string GetConnectionString()
{
    return ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString;
}
Хидает Р. Колкусу
источник
2
string sTemp = System.Configuration.ConfigurationManager.ConnectionStrings["myDB In app.config"].ConnectionString;
Хатами
источник
2

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

_connectionString = ConfigurationManager.ConnectionStrings["MYSQLConnection"].ConnectionString.ToString();
Сагар Джейбхай
источник
2

Это сработало для меня:

string connection = System.Configuration.ConfigurationManager.ConnectionStrings["Test"].ConnectionString;

Выходы:

Источник данных =; Исходный каталог = OmidPayamak; IntegratedSecurity = True "

Талха Имам
источник
1

Вы можете получить строку подключения, используя приведенную ниже строку кода -

using System; using System.Configuration;

var connectionString=ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

Вот ссылка: Строка соединения из App.config

somesh
источник
2
Я сделал то же самое, что вы сказали, но я получил ту же нулевую ссылку.
Загадочный разум
1

Кажется, что проблема не в ссылке, вы получаете строку соединения как ноль, поэтому, пожалуйста, убедитесь, что вы добавили значение в конфигурационный файл вашего запущенного проекта, означающего основную программу / библиотеку, которая запускается / запускается первой.

Чандра Малла
источник
1

Возможно, что ОП в этом вопросе пытается использовать App.Config в DLL.

В этом случае код фактически пытается получить доступ к App.Config исполняемого файла, а не к DLL. Поскольку имя не найдено, возвращается значение Null, поэтому показано исключение.

Следующий пост может быть полезным: ConnectionString из app.config библиотеки DLL имеет значение null

Эндрю
источник
0

Я ссылался на System.Configurationбиблиотеку, и у меня та же ошибка. Файлы отладки не имели своего app.config, создайте вручную этот файл. Ошибка в том, что я решил эту проблему, скопировав файл appname.exe.config в папку отладки. В IDE не был создан файл.

jjcaicedo
источник
0

Я решил проблему, используя индекс для чтения строки и проверяя одну за другой. Чтение с использованием имени по-прежнему дает ту же ошибку.
У меня проблема при разработке приложения для окна C #, у меня не было проблемы в моем приложении asp.net. В настройках должно быть что-то, что не правильно.

dew17
источник