2017-10-25 2 views
1

Ich arbeite an einer App, die eine Live-Netzwerk-Datenbank und eine lokale Notfalldatenbank hat, und erkennt, ob die Live-Netzwerk-DB zugänglich ist, und wenn nicht, nach drei Sekunden abläuft, Ändern der Verbindungszeichenfolge in die lokale Notfalldatenbank.Firebird ConnectionString Änderung während der Laufzeit

Folgende Tipps hier auf SO, ich habe es geschafft, ändern Sie die Verbindungszeichenfolge in app.config während der Laufzeit und laden Sie die Einstellungen neu.

Dies ist die Methode der App aufrufen, wenn eine Änderung an der Verbindungszeichenfolge benötigt wird:

public static void ChangeConnectionString(string connectionstring) 
    { 
    var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
    connectionStringsSection.ConnectionStrings[0].ConnectionString = connectionstring; 
    var connectionStrings = config.ConnectionStrings; 
    foreach (ConnectionStringSettings connectionString in connectionStrings.ConnectionStrings) 
    { 
      connectionString.ConnectionString = connectionstring; 
    } 
    config.Save(); 
    ConfigurationManager.RefreshSection("connectionStrings"); 
    PDV_WPF.Properties.Settings.Default.Save(); 
    PDV_WPF.Properties.Settings.Default.Reload(); 
    //Ensures the configuration is saved and reloaded. 
    FbConnection.ClearAllPools(); 
    //Closes all currently open connections which might be using the old connection string. 
    Debug.WriteLine("==========Ran ChangeConnectionString"); 
    Debug.WriteLine("==========FDBConnString is:"); 
    Debug.WriteLine("==========" + PDV_WPF.Properties.Settings.Default.FDBConnString); 

Nachdem ich mein Computer trenne das Netzwerk bilden, wenn ich das aktuelle FDBConnString überprüfen, es richtig mit dem lokalen Punkt Notfalldatenbank. Doch auf der nächsten Zeile, wenn er versucht, eine Abfrage auszuführen, erhalte ich die folgende Ausnahme:

Inner Exception 1: 
IscException: Unable to complete network request to host "dbserver". 

Inner Exception 2: 
SocketException: Este host não é conhecido //(This host is unknown) 

Volle Ausnahmedetails: https://pastebin.com/3syLvsQf

Es scheint, dass, auch nachdem ich erfolgreich die Verbindungszeichenfolge ändern , und lädt die Konfigurationsdatei der Anwendung erfolgreich neu. Sie versucht dennoch, eine Verbindung mit der alten Verbindungszeichenfolge zu öffnen. Auch wenn ich Debuggen, um die aktuelle Properties.Settings.Default.FDBConnString direkt in der Zeile über dem Aufruf für FbConnection.Open() zu drucken, zeigt es die neue Zeichenfolge anstelle der falschen, alten.

Irgendwelche Erkenntnisse darüber, was passieren könnte?

+0

Welche Version des Providers Firebird ado.net verwenden Sie? –

+0

Ich habe mir das NuGet-Paket, Version 5.11.0 geschnappt, und ich musste diese Problemumgehung mit dem Zugriff auf die privateregistry.bin verwenden, damit der Anbieter auf der Liste der registrierten Anbieter in Visual Studio 2017 angezeigt wird –

Antwort

0

Ich fand, was das Problem war. Ich bin ein geerbter Tabellenadapter aus der generierten Xsd-Datei. Wenn ich einen Tabellenadapter für meine Klasse deklariere, erbt er auch die zum Zeitpunkt der Deklaration in der app.config gespeicherte Verbindungszeichenfolge. Es ist also egal, ob ich app.config ändere, da der deklarierte Tabellenadapter bereits mit der vorherigen Verbindungszeichenfolge verbunden ist.

die Lösung war also, anstatt die Verbindungszeichenfolge auf app.config gespeichert ändern, ich hatte gerade die Verbindungszeichenfolge auf dem deklarierten Tabellenadapter zu ändern:

tB_STOCKTableAdapter1.Connection.ConnectionString = Properties.Settings.Default.ContingencyDB; 
tB_STK_PRODUCTTableAdapter1.Connection.ConnectionString = Properties.Settings.Default.ContingencyDB; 

oder

tB_STOCKTableAdapter1.Connection.ConnectionString = Properties.Settings.Default.NetworkDB; 
tB_STK_PRODUCTTableAdapter1.Connection.ConnectionString = Properties.Settings.Default.NetworkDB; 

Sowohl ContingencyDB als auch NetworkDB sind Zeichenketten, die in der Datei app.config als benutzerdefinierter String gespeichert sind, der über ein bestimmtes Fenster "Einstellungen" geändert werden kann, das dem Benutzer angezeigt wird.

Verwandte Themen