Connectionstring extern

06/09/2007 - 16:00 von michael meier | Report spam
hallo

ich habe für ein (recht überschaubares) projekt eine dll, die für
datenbank-zugriffe zustàndig ist. die zugriffsmethoden innerhalb dieser
dll habe ich mit dem dataset-designer (ich glaub, so heisst das teil) von
vs2005 gemacht. daraufhin wird u.a. folgendes erstellt:
(1) eine klasse settings (internal sealed partial class Settings :
global::System.Configuration.ApplicationSettingsBase)
befindet sich im unterverzeichnis properties. hier steht der
connectionstring zur benutzten datenbank fest codiert als attribut drin:
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
[global::System.Configuration.DefaultSettingValueAttribute("Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=\"|DataDirectory|\\Protron Prüfplanung" +
".mdb\";Persist Security Info=True")]
public string Protron_PrüfplanungConnectionString {
get {
return ((string)(this[ "Protron_PrüfplanungConnectionString" ]));
}
}

(2) xml-datei app.config, die ebenfalls den connectionstring enthàlt:
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add
name="Promess.Protron.DBAccess.Properties.Settings.Protron_PrüfplanungConnectionString"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=&quot;|DataDirectory|\Protron Prüfplanung.mdb&quot;;Persist
Security Info=True"
providerName="System.Data.OleDb" />
</connectionStrings>
</configuration>

so, das mit der app.config find ich garnicht schlecht, nur habe ich das
problem, daß es genau diese app.config zur laufzeit nicht mehr gibt. mit
anderen worten: die wird entweder garnicht beachtet oder einmalig zur
compile-zeit ausgelesen und dann fest eingedröselt, was ich aber eher
nicht glaube.

mein problem ist nun, daß ich gern zur laufzeit diese xml-datei hàtte,
damit man u.u. noch anpassungen vornehmen kann, wenn sie die
datenbank-datei an einem anderen ort befindet. wie geht sowas am besten?
(ich glaube mal gelesen zu haben, daß es auch relevant ist, daß es sich
hier um ein dll-projekt handelt, nicht um eine .exe - gibt es da dann
überhaupt eine möglichkeit, solche parameter erst zur laufzeit einzulesen
und bleibt als einzige möglichkeit, die hauptanwendung dieses string über
ihre .exe.config lesen zu lassen und der dll als "startparameter"
bekanntzugeben? wàre natürlich nicht so toll, weil der dataset-designer ja
da sicher nicht so einfach drauf hört und es dann im zweifel auf mehere
stellen hinauslàuft, an denen so ein connectionstring steht...)

dankbar für hinweise


micha
 

Lesen sie die antworten

#1 Frank Dzaebel
06/09/2007 - 18:36 | Warnen spam
Hallo Michael,

klasse settings ... ApplicationSettingsBase ... connectionstring zur
benutzten datenbank fest codiert als attribut drin:



ok, normal. Ggf. denke daran keine Klartext-Passwörter
da hineinzutun -> RsaProtectedConfigurationProvider-Klasse, o.à..



so, das mit der app.config find ich garnicht schlecht, nur habe ich das
problem, daß es genau diese app.config zur laufzeit nicht mehr gibt. mit
anderen worten: die wird entweder garnicht beachtet oder einmalig zur
compile-zeit ausgelesen und dann fest eingedröselt, was ich aber eher
nicht glaube.



Wenn es sie gibt, wird daraus gelesen. Wenn nicht, wird der in der
Settings.cs codierte Default benutzt, wenn da keiner drinsteht versucht
ggf. aus den UserSettings zu lesen. Ggf. auch weitere Fallbacks
auf machine.config etc. möglich.



mein problem ist nun, daß ich gern zur laufzeit diese xml-datei hàtte,
damit man u.u. noch anpassungen vornehmen kann,



aha! Aber bitte nicht mit *Applikations* - Settings.
Wenn zur Laufzeit Anpassungen gemacht werden sollen,
wàre der UserScope richtig (Benutzer-Settings).
Aus vielerlei Gründen ist es so designed, dass AppSettings
nicht zur Laufzeit geàndert werden sollen/können, obwohl
es immer Hintertüren gàbe. Änderbar sind aber Benutzersettings!
Du brauchst den wirklichen Pfad zu dieser Benutzer-XML-Datei
da sogar gar nicht (obwohl ich ihn Dir sagen kann), da Du einfach
die "Properties.Default.*" àndern kannst und dann
Properties.Save(...) aufrufen kannst.



ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen