Uzyskaj parametry połączenia z App.config


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

A to moja 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>

Ale kiedy mój projekt się uruchamia, to jest mój błąd:

Odwołanie do obiektu nie jest ustawione na instancję obiektu.


5
Gdzie umieściłeś ten plik App.config? Projekt uruchomionej aplikacji, a może dll? Najpierw potrzebujesz
abatishchev

3
Dodaj odwołanie do System.Configuration.dll, a powinieneś mieć możliwość korzystania z System.Configuration.ConfigurationManager.
daszarrin

Twój ciąg połączenia ma literówkę. Potrzebujesz odstępu między „zintegrowanym” a „bezpieczeństwem”
Onur Omer,

@OnurOmer - pytanie zostało zaktualizowane o miejsce („Zintegrowane zabezpieczenia” zamiast „Zintegrowane bezpieczeństwo”)
SlimsGhost

Odpowiedzi:


484

Czy nie możesz po prostu wykonać następujących czynności:

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

Twój zespół wymaga również odniesienia do System.Configuration.dll


14
Wiem, że jest to pytanie w języku C #, ale ponieważ jest to szczyt wyników wyszukiwania Google, aby to zrobić w VB, to System.Configuration.ConfigurationManager.ConnectionStrings("Test").ConnectionStringdla tych z nas, którzy muszą zachować kod VB
JFA

296

Ponieważ jest to bardzo częste pytanie, przygotowałem kilka zrzutów ekranu z programu Visual Studio, aby ułatwić wykonanie 4 prostych kroków.

pobierz parametry połączenia z app.config


22
Uwielbiam tę odpowiedź. Domyślnie w mojej wersji VS (VS2012 Ultimate) ta biblioteka nie jest uwzględniona, ale using System.Configurationnadal działa
David Colwell

3
Naprawdę Miałem dodać odwołanie lub użycie nie zostało podkreślone, ale Menedżer konfiguracji jest nieznany. Dzięki!
CodingYourLife,

33
string str = Properties.Settings.Default.myConnectionString; 

1
Co jeśli app.config zostanie dodany jako link do projektu?
FrenkyB

2
Działa to tylko wtedy, gdy ciąg połączenia jest ustawieniem aplikacji, nie zadziała, jeśli pobierzesz <connectionStrings>elementy z app.config (o co prosi OP!).
BrainSlugs83

31

Sprawdź także, czy System.Configurationpod odnośnikami umieściłeś bibliotekę DLL. Bez niego nie będziesz mieć dostępu do ConfigurationManagerklasy w przestrzeni nazw System.Configuration.


22

Najpierw dodaj odniesienie System.Configurationdo swojej strony.

using System.Configuration;

Następnie Zgodnie z app.config pobierz ciąg połączenia w następujący sposób.

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

To wszystko, teraz masz ciąg połączenia w ręce i możesz go użyć.


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

Wypróbuj to

string abc = ConfigurationManager.ConnectionStrings["CharityManagement"].ConnectionString;

3

1) Utwórz nowy formularz i dodaj go:

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

kiedy chcesz użyć połączenia, zrób to w swojej formie:

 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()

i to wszystko. Zostaniesz podłączony do bazy danych i będziesz mógł robić różne rzeczy.

Dotyczy to vb.net, ale logika jest taka sama.


3

Czy próbowałeś:

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

3

Miałem ten sam problem. moje rozwiązanie zostało zbudowane z dwóch projektów. A Class libraryoraz strona internetowa odnosząca się do projektu biblioteki klas. Problem polegał na tym, że próbowałem uzyskać dostęp do App.configmojego Class libraryprojektu, ale system przeszukiwał Web.configwitrynę. Wstawiłem ciąg połączenia Web.configi ... problem rozwiązany!

Głównym powodem było to, że pomimo ConfigurationManagerużycia w innym zestawie, szukał w projekcie runnig.


3

Możesz użyć tej metody, aby uzyskać parametry połączenia

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

Najpierw musisz dodać System.Configurationodniesienie do swojego projektu, a następnie użyć poniższego kodu, aby uzyskać parametry połączenia.

_connectionString = ConfigurationManager.ConnectionStrings["MYSQLConnection"].ConnectionString.ToString();

2

To działało dla mnie:

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

Wyjścia:

Źródło danych = .; Początkowy katalog = OmidPayamak; IntegratedSecurity = True ”


1

Możesz pobrać parametry połączenia, używając poniższego wiersza kodu -

using System; using System.Configuration;

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

Oto odniesienie: ciąg połączenia z App.config


2
Zrobiłem to samo, co powiedziałeś, ale otrzymuję ten sam błąd odniesienia.
Enigmatic Mind

1

Wygląda na to, że problem nie dotyczy odniesienia, otrzymujesz ciąg połączenia jako zerowy, więc upewnij się, że dodałeś wartość do pliku konfiguracyjnego twojego uruchomionego projektu, co oznacza, że ​​główny program / biblioteka jest uruchamiana / uruchamiana jako pierwsza.


1

Możliwe, że OP w tym pytaniu próbuje użyć App.Config w bibliotece dll.

W tym przypadku kod faktycznie próbuje uzyskać dostęp do App.Config pliku wykonywalnego, a nie dll. Ponieważ nie znaleziono nazwy, zwracana jest wartość Null, stąd pokazany wyjątek.

Pomocny może być następujący post: ConnectionString z app.config DLL jest pusty


0

Odwołałem się do System.Configurationbiblioteki i mam ten sam błąd. Pliki debugowania nie miały pliku app.config, utwórz ręcznie ten plik. Błąd polega na tym, że rozwiązałem to kopiowanie pliku „appname.exe.config” w folderze debugowania. IDE nie utworzyło pliku.


0

Rozwiązałem problem, używając indeksu do odczytu łańcucha i sprawdzając jeden po drugim. Czytanie przy użyciu nazwy nadal powoduje ten sam błąd.
Mam problem podczas tworzenia aplikacji w oknie C #, nie miałem problemu w mojej aplikacji asp.net. W ustawieniu musi być coś, co jest nie tak.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.