Cambiare Connection string in progetto dll
-
giovedì 12 aprile 2012 09:06
Buongiorno a tutti,
vorrei poter cambiare in runtime la stringa di connessione di una libreria di classi(dll).
Ho usato il seguente codice ma la connessione rimane sempre la stessa, non credo sia la soluzione corretta. La nuova connessione verrebbe passata come parametro in input alla funzione sotto descritta:public void UpdateConnectionStrings(string connectionString) { try { Configuration MyConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); MyConfig.ConnectionStrings.ConnectionStrings[1].ConnectionString = connectionString; MyConfig.Save(); ConfigurationManager.RefreshSection("connectionStrings"); } catch (Exception) { throw; } }
Tutte le risposte
-
giovedì 12 aprile 2012 09:11
qui c'è qualcosa, ma non so se per una DLL funziona :
-
giovedì 12 aprile 2012 10:28
Ciao Nicola,
ma devi cambiarla nell'app config? perché una dll usa come app.config quello dell'applicazione che la sta utilizzando.
Se mi dai un pò più dettagli posso vedere che si può fare
Ciao Max
-
giovedì 12 aprile 2012 15:38
Ciao Max,
per farla breve io ho una dll al cui interno ho un windowsForm. Nel Form ho una dataGridView che viene popolata tramite una DataSet. Nei Settings della mia dll vi è la stringa di connessione al DB. Vedi qui sotto:
Quando richiamo questo form ( presente nella dll) da un altra applicazione vorrei prima poter cambiare questa stringa di connessione per cambiare DB di collegamento ( per esempio cambiare da un server localhost ad uno remoto).
Come potrei fare?
grazie x qualsiasi suggerimento.
-
giovedì 12 aprile 2012 16:50Postatore
Lo screenshot che hai mostrato si riferisce agli application settings, che vengono memorizzati in una sezione particolare del file .config, ovvero applicationSettings. Nel codice che hai postato all'inizio, invece, modifichi la sezione connectionStrings del file di configurazione.
Non puoi fare in modo che, come stringa di connessione, venga direttamente utilizzata quella passata al metodo UpdateConnectionStrings, anzinché aggiornare il valore del file .config?
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva- Modificato Marco MinervaMicrosoft Community Contributor, Editor giovedì 12 aprile 2012 16:51
-
giovedì 12 aprile 2012 18:36
Ciao Nicola,
sono pienamente d'accordo con quanto suggerito da Marco, ti conviene cioè fare in modo che la tua dll non utilizzi nessun file di configurazione ma utilizzi una stringa di connessione in memoria che verrà fornita dal client della dll.
Inoltre, come sempre Marco ha precedentemente notato, tu la stringa di connessione la hai messa in un posto e cerchi di modificarla in un altro, alle application settings generalmente ci accedi attraverso Settings.Default.<SettingName>, tuttavia mi sento di sconsigliarti questo approccio.
Ciao Max
-
venerdì 13 aprile 2012 21:00
Grazie Marco x il suggerimento, però mi devi scusare ma non mi resta ben chiaro sul come fare.
Dovrei quindi cancellare quella parametro stringa di connessione presente nello screenshot ???
Questa dovrebbe essere usata dal dataset per popolare la mia Grid, se la tolgo poi come specifico al dataset dove trovare la stringa di connessione passata dal client che usa tale dll ???
-
venerdì 13 aprile 2012 21:05Postatore
Quel parametro non ti serve, perché di fatto sei tu che devi esplicitamente passare la stringa di connessione alla libreria, qundi lo puoi cancellare.
Non conosco il codice che usi per creare il DataSet, quindi non so come effettui la connessione vera e propria al database.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
domenica 15 aprile 2012 16:48
Quando inserisco nel form la mia datagridview scelgo l'origine dati che nel mio caso fa riferimento ad un dataset. Quindi seleziono il database e la tabella da collegare alla Grid. In realtà non scrivo nemmeno una linea di codice. Alla fine mi trovo all'interno del mio progetto dll un file GetrotoDataSet.xsd al cui interno trovo più di una classe tra queste anche :
public partial class combprolungheTableAdapter : global::System.ComponentModel.Component { private global::MySql.Data.MySqlClient.MySqlDataAdapter _adapter; private global::MySql.Data.MySqlClient.MySqlConnection _connection; private global::MySql.Data.MySqlClient.MySqlTransaction _transaction; private global::MySql.Data.MySqlClient.MySqlCommand[] _commandCollection; private bool _clearBeforeFill; . . .al cui interno vi è un metodo dove viene assegnata la connectionString :
private void InitConnection() { this._connection = new global::MySql.Data.MySqlClient.MySqlConnection(); this._connection.ConnectionString = "server=localhost;User Id=root;password=root;Persist Security Info=True;database=g" + "etroto"; }il quale viene richiamato da un altro metodo Connection:
internal global::MySql.Data.MySqlClient.MySqlConnection Connection { get { if ((this._connection == null)) { this.InitConnection(); } return this._connection; } set { this._connection = value; if ((this.Adapter.InsertCommand != null)) { this.Adapter.InsertCommand.Connection = value; } if ((this.Adapter.DeleteCommand != null)) { this.Adapter.DeleteCommand.Connection = value; } if ((this.Adapter.UpdateCommand != null)) { this.Adapter.UpdateCommand.Connection = value; } for (int i = 0; (i < this.CommandCollection.Length); i = (i + 1)) { if ((this.CommandCollection[i] != null)) { ((global::MySql.Data.MySqlClient.MySqlCommand)(this.CommandCollection[i])).Connection = value; } } } }Il tutto è abbastanza contorto, però questo viene appunto generato automaticamente e credo eseguito in runtime. devo in qualche modo operare e modificare questa classe?
-
domenica 15 aprile 2012 17:23Postatore
No, questa classe non deve essere modificata, perché è generata automaticamente da Visual Studio, e quindi le modifiche sarebbero perse se Visual Studio dovesse ricrearla.
Nella tua applicazione, dovrebbe essere utilizzato il TableAdapter di nome combprolungheTableAdapter. Prima del suo uso, devi impostare la sua proprietà Connection su un oggetto MySqlConnection che utilizza la stringa di connessione corretta. Qualcosa di questo tipo:
MySqlConnection conn = new MySqlConnection(/* La stringa di connessione che vuoi utilizzare */); combprolungheTableAdapter.Connection = conn;
Ovviamente, questo è solo un esempio, dovrai adattare questo piccolo esempio al tuo contesto.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva- Contrassegnato come risposta Irina TurcuMicrosoft Contingent Staff, Owner martedì 17 aprile 2012 10:51
-
lunedì 16 aprile 2012 12:35
No, questa classe non deve essere modificata, perché è generata automaticamente da Visual Studio, e quindi le modifiche sarebbero perse se Visual Studio dovesse ricrearla.
Nella tua applicazione, dovrebbe essere utilizzato il TableAdapter di nome combprolungheTableAdapter. Prima del suo uso, devi impostare la sua proprietà Connection su un oggetto MySqlConnection che utilizza la stringa di connessione corretta. Qualcosa di questo tipo:
MySqlConnection conn = new MySqlConnection(/* La stringa di connessione che vuoi utilizzare */); combprolungheTableAdapter.Connection = conn;
Ovviamente, questo è solo un esempio, dovrai adattare questo piccolo esempio al tuo contesto.
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva
Grazie mille Marco, ho fatto come da te suggerito, problema risolto.- Contrassegnato come risposta Nicola Mod lunedì 16 aprile 2012 12:36
- Contrassegno come risposta annullato Irina TurcuMicrosoft Contingent Staff, Owner martedì 17 aprile 2012 10:49
-
lunedì 16 aprile 2012 12:43Postatore
Sono contento di averti aiutato.
Mi permetto di farti notare una cosa: hai selezionato come risposta un tuo post, mentre dovresti segnare il post in cui io ti ho dato le indicazioni su come risolvere il problema (ovvero quello precedente).
Grazie per l'attenzione!
Marco Minerva [MCPD]
Blog: http://blogs.ugidotnet.org/marcom
Twitter: @marcominerva -
sabato 21 aprile 2012 19:19Ciao Marco, hai ragione , sul post sbagliato come risposta, cmq grazie ancora per l'attenzione. ciao e saluti

