Laden...

Datenbanken per Assistent erstellt - Connection String

Erstellt von wickedcsharper vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.187 Views
wickedcsharper Themenstarter:in
160 Beiträge seit 2008
vor 14 Jahren
Datenbanken per Assistent erstellt - Connection String

verwendetes Datenbanksystem: <C# Access Jet Ado.Net>

Hallo zusammen,

ich habe über den Assistenten eine Access Datenbank in mein Formular eingebunden. D.h. BindingSource, TableAdapter, Navigation,BindingSource und DataSet alles automatisiert eingebunden- schön und gut.

Beim Einbinden musste ich dem Assistenten natürlich mitteilen, auf welche Datenbank ich zugreife um z.B. in meinem Customer Formular auf Kundendaten zuzugreifen. Die Datenbank liegt bei mir lokal auf D:\Projekte\TS\yx.mdb

Wenn ich die Datenbank in einem Setup verpacke und auch mit ausliefere, liegt sie
auf dem KundenPC auf z.B. C:\Programme\ck\myApplikation\Data\xy.mdb.
Dann stürzt beim Zugriff des CustomerFormulars auf die Daten aber die Anwendung ab.
Wahrschjeinlich deshalb weil der ConnectionString meiner appl.Config Datei auf D:\Projekte\TS also auf den Ordner meiner lokalen Datenbank zeigt.

Wie erreiche ich es das bei einer automatisierten Datenbindung der ConnectionString
geändert werden kann ? Ein Ausweg wäre eventuell die Datenbank in das Projekt mit einzubinden, aber was, wnn Kunden selber entscheiden wollen wo die Datenbank liegt ?
Ich fände es doof, die jedesmal in den bin/Release Ordner meiner Anwendung zu integrieren.

Wie handhabt man sowas ???

Danke für eventuelle Ansätze...

mfg

Torsten

„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“

643 Beiträge seit 2006
vor 14 Jahren

Überprüfe ob die Datenbank im Standartverzeichnis liegt. Wenn nicht, soll der Benutzer diesen vorher angeben. Den schreibst du dan, in deine Konfigurations Datei.

wickedcsharper Themenstarter:in
160 Beiträge seit 2008
vor 14 Jahren
Konfigdatei

...war die nicht readonly ?
in folgendem Thread stand was davon
http://www.mycsharp.de/wbb2/thread.php?threadid=6439

mit zurückschreiben ist da nichts soweit ich weiss.

Andererseits muss es doch ein Standardvorgehen geben. Vielleicht ist es ja gedacht, dass die mitgeliefgerte Datenbank im ApplikationFolder/bin/Release
zu suchen ist. Fände ich nur recht unflexibel. Irgendwo in meiner Config muss der Pfad bzw. der Connection String doch änderbar sein. Sonst bringt mir der dämliche Assistent gleich Null, wenn der den ConnectionString hardcodiert.

„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“

643 Beiträge seit 2006
vor 14 Jahren

/// <summary>
/// First remove the old connectionstring and after that
/// add a connection string to the connectionstrings
/// section and store it in the configuration file. 
/// </summary>
/// <param name="csName">The name of the property.</param>
/// <param name="connectionString">The connectionstring as specified.</param>
public static void UpdateConnectionStrings(string csName, string connectionString)
{
// Get the configuration file
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);

// Remove the existing connectionstring.
config.ConnectionStrings.ConnectionStrings.Remove(csName);
// Add the connectionstring
ConnectionStringsSection csSection = config.ConnectionStrings;
csSection.ConnectionStrings.Add(
new ConnectionStringSettings(csName, 
connectionString, "System.Data.SqlClient"));

// Save the configuration file
config.Save(ConfigurationSaveMode.Full);
}


wickedcsharper Themenstarter:in
160 Beiträge seit 2008
vor 14 Jahren
Super

Danke für den Tipp !!!!
klar. wenn read only dann halt erst löschen und neu schreiben.

werde es austesten und bei mich bei Fehlverhalten melden.
Ansonsten als gelöst verbuchen...

Danke nochmals

Torsten

„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“

wickedcsharper Themenstarter:in
160 Beiträge seit 2008
vor 14 Jahren
kleiner Zusatz

der obige Quellcode ist soweit OK
funktioniert aber nur wenn über Verweise die
.Net Komponente System.Configuration hinzugefügt wird

desweiteren werden Änderungen nicht wie ich dachte in der app.config gespeichert, sondern in der xy.exe.config (xy steht für den Applikationsnamen) im bin/Release-Verzeichnis (oder auch Debug je nachdem was man gerade kompiliert).

Das nur zur Info, falls mal jemandem weiterhilft.

Torsten

„Wenn man eine Katze auseinandernehmen will, um zu sehen, wie sie funktioniert, hat man als erstes eine nicht funktionierende Katze in den Händen.“

J
1.114 Beiträge seit 2007
vor 14 Jahren

Wenn ich die Datenbank in einem Setup verpacke und auch mit ausliefere, liegt sie
auf dem KundenPC auf z.B. C:\Programme\ck\myApplikation\Data\xy.mdb.

Das ist wahrlich ein denkbar schlechter Speicherort, da normale Benutzer in der Regel keine Schreibrechte auf c:\Programme besitzen. Das solltest du auf jeden Fall berücksichtigen.