Mam klasę połączenia, której używam do łączenia się z moją bazą danych, za każdym razem, gdy wykonuję instrukcję select, insert, etc ... Mam ciąg połączenia zakodowany na stałe w klasie.
Problem polega na tym, że jeśli muszę zmienić serwery bazy danych, muszę zmienić ciąg w każdej aplikacji i ponownie opublikować.
Oto mój ciąg połączenia:
var cnnString = string.Format("user id=sa;" +
"password=pw;server=database\instance;" +
"database=dbase; " +
"connection timeout=10");
Myślałem o utworzeniu tabeli i przechowywaniu tam informacji o bazie danych, ale to nie pomaga, jeśli nie można użyć klasy połączenia do wybrania z bazy danych.
Czy można to zrobić dynamicznie?
Odpowiedzi:
2 dla odpowiedzi № 1Umieść parametry połączenia w pliku .config i użyj klasy ConfigurationManager: https://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager%28v=vs.110%29.aspx
Załaduj wszystkie parametry połączenia do tablicy / słownika, a następnie, gdy trzeba utworzyć połączenie, używając odpowiedniego ciągu połączenia.
1 dla odpowiedzi nr 2
Możesz użyć pliku Appconfig
<appSettings>
<add key="dbserver" value="IP_SERVER" />
<add key="dbname" value="DB_NAME" />
<add key="dbuser" value="sa" />
<add key="dbpass" value="PASSWORD" />
</appSettings>
następnie użyj tego, aby utworzyć połączenie łańcuchowe
string strConexion = "Data Source="" + ConfigurationManager.AppSettings["dbserver"] + "";" +
"Initial Catalog="" + ConfigurationManager.AppSettings["dbname"] + "";" +
"User Id="" + ConfigurationManager.AppSettings["dbuser"] + "";" +
"Password="" + ConfigurationManager.AppSettings["dbpass"] + "";";
Za pomocą tego formularza można zmienić wartości konfiguracji
// Otwórz aplikację. Konfiguracja pliku wykonywalnego
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove("dbserver");
config.AppSettings.Settings.Remove("dbname");
config.AppSettings.Settings.Remove("dbuser");
config.AppSettings.Settings.Remove("dbpass");
// Add an Application Setting.
config.AppSettings.Settings.Add("dbserver", txtDBServer.Text);
config.AppSettings.Settings.Add("dbname", txtDBName.Text);
config.AppSettings.Settings.Add("dbuser", txtDBUser.Text);
config.AppSettings.Settings.Add("dbpass", txtDBPassword.Text);
Zapisz zmiany w pliku App.config.
config.Save(ConfigurationSaveMode.Modified);
Wymuś przeładowanie zmienionej sekcji.
ConfigurationManager.RefreshSection("appSettings");