Wie konfiguriere ich eine Verbindungszeichenfolge config programmgesteuert in .net?
Ich würde gerne eine Verbindungszeichenfolge programmgesteuert, mit absolut keine änderung an config-Dateien /registry-Schlüssel.
Ich habe dieses Stück code, aber leider wirft er eine exception mit "die Konfiguration ist schreibgeschützt".
ConfigurationManager.ConnectionStrings.Clear();
string connectionString = "Server=myserver;Port=8080;Database=my_db;...";
ConnectionStringSettings connectionStringSettings =
new ConnectionStringSettings("MyConnectionStringKey", connectionString);
ConfigurationManager.ConnectionStrings.Add(connectionStringSettings);
Edit:
Das problem ist, dass ich den vorhandenen code, liest die Verbindungszeichenfolge aus der Konfiguration. Damit das setzen der config-Zeichenkette manuell oder über eine Ressource, die nicht scheinen, wie gültige Optionen. Was ich wirklich brauche ist ein Weg, um die Konfiguration zu ändern programmgesteuert.
InformationsquelleAutor der Frage ripper234 | 2008-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich geschrieben über diese in einem post auf meinem blog. Der trick ist, verwenden Sie reflektion, um poke-Werte als ein Weg, um Zugang zu den nicht öffentlichen Felder (und Methoden).
zB.
InformationsquelleAutor der Antwort David Gardiner
War ich auf der Suche nach der Antwort auf die gleiche qustion über, sodass der Benutzer ändern Sie die Verbindungszeichenfolge in einem Klick sobald die Anwendung, indem Sie auf einem lokalen SQL-Server.
Den code unten zeigt ein Benutzerformular, welche Kontakte alle lokal verfügbaren SQL-Servern und erlaubt Ihnen zu wählen. Dann konstruiert Sie eine Verbindungszeichenfolge für das sever und gibt es aus, eine variable auf der form. Der code ändert die config-Dateien UND SPEICHERT SIE.
InformationsquelleAutor der Antwort Rupert Davis
Einen anderen Weg, dies zu nähern, wäre zu operieren, die Sammlung direkt:
InformationsquelleAutor der Antwort NotNormal
Ich finde, dass dies für mich funktioniert:
Diese überschreibt eine vorhandene Verbindungszeichenfolge.
InformationsquelleAutor der Antwort Junto
Ich bin derzeit mit dependency injection, um die Handhabung der verschiedenen Verbindungszeichenfolgen in dev/prod vs. test-Umgebungen. Ich muss immer noch manuell ändern Sie die webconfig, wenn ich mich bewegen will, um zwischen dev und prod, aber zum testen habe ich eine IConnectionStringFactory interface mit einer default-Implementierung, der schaut auf die web-config und eine Alternative Konfiguration testen, gibt statische Werte. So, wenn ich Teste ich einfach die Fabrik auf die Prüfung der Umsetzung und es wird wieder das testen der connection-string für den Schlüssel, ich Frage für. Anders sieht es in der webconfig.
Konnte ich erweitern diese um eine weitere Implementierung für dev vs. prod, aber ich bin mehr komfortabel mit einer einzigen Implementierung von IConnectionStringFactory in meiner Produktion die Montage und die Tests, die Umsetzung in meinen Tests Versammlung.
InformationsquelleAutor der Antwort Jamal Hansen
Könnte man es in einer Ressourcen-Datei statt. Es wird nicht die built-in features von der ConfigurationManager-Klasse, aber es wird funktionieren.
Vorausgesetzt Ressourcen.resx:
Resources.Default.ConnectionString = "Server=myserver;" //etc
Dann in deinem code:
conn.ConnectionString = Resources.Default.ConnectionString
Es ist ein hack, ich weiß.
InformationsquelleAutor der Antwort Robert S.
Zusätzlich zu den anderen Antworten, die gegeben werden, und wenn der connection-string ist nicht einfach nur eine andere variable oder Konstante als ganze, sollten Sie überlegen, mit SqlConnectionStringBuilder Klasse statt direkt verkettet den string zusammen.
EDIT: Ups, sorry, gerade gesehen, dass Sie im Grunde wollen, Lesen Sie die Verbindungszeichenfolge (komplett denke ich) aus einer anderen Quelle.
InformationsquelleAutor der Antwort Christian.K
ConfigurationManager wird verwendet, um Lesen aus der config-Datei.
Ihre Lösung ist, einfach set conn.ConnectionString, um die conn-string, die Sie benötigen.
InformationsquelleAutor der Antwort devio