Cambiare connectionstring dell'app.config a run time

domenica 23 settembre 2012 - 21.15

DomA Profilo | Expert

Salve,
so che è problema che è stato discusso decine di volte ma, non sono riuscito a trovare una valida soluzione.
In pratica ho la necessità di riuscire a cambiare connectionstring dell'app.config a run time.
In parole povere mi serve una classe che permetta all'utente, attraverso una finestra di dialogo, di riuscire a settare la suddetta connectionstring.

Grazie in anticipo.


----------------------------------------------------------------------------------------


http://www.infomidia.it

Domenico

pieroalampi Profilo | Expert

Proprio questa sera ho fatto una sezione per le conf di un software utilizzando i my. Settings non ho provato con la connection string ma in ogni caso dovresti trasformare la stringa da applicazione ad utente poi assegni un valore dal form e lo salvi con es. my.settings.save(), ora scrivo dal telefono ma domani se la cosa non è' chiara ti posto tutto il codice ok??? In ogni caso ripeto non ho provato con la stringa di tipo applicazione ma solo con quella tipo utente, fammi sapere come va
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

DomA Profilo | Expert

Ciao,
magari se posti il codice è meglio. Il mio problema è che mi dice che i settings sono ReadOnly
A presto,

--------------------------------------

http://www.infomidia.it

Domenico

pieroalampi Profilo | Expert

si certo che ti dice che è solo in lettura appunto per questo ti dicevo di cambiare l'ambito che nel tuo caso è di tipo applicazione, prova a cambiarlo o a farne uno nuovo in ambito utente e prova a cambiare quello, per essere più chiaro: crea la nuova stringa cambia l'esistente in ambito utente nel valore metti la stringa di connessione nell'esempio la chiamo ConnectionString, poi qui il codice:

nelle impostazioni cambio il tipo e metto string, ambito metto utente e poi nel valore scrivo la stringa di connessione (se modifichi quella che c'era prima ti conviene copiarla prima perche vs appena cambi da st di connessione a string ti visualizza il file xml)
crea una textbox chiamata TxtBoxSqlConn

nel load del form metti:
TxtBoxSqlConn.Text = My.Settings.ConnectionString

poi crei una tasto salva:
My.Settings.ConnectionString= TxtBoxSqlConn
My.Settings.Save()

e via cosi, prova e fammi sapere

------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

DomA Profilo | Expert

Ciao,
ho già provato questo metodo, ma non va.

L'errore è qui:

My.Settings.ConnectionString = TxtBoxSqlConn ---> ConnectionString è ReadOnly


Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.

http://www.infomidia.it

Domenico

pieroalampi Profilo | Expert

nelle impostazioni hai cambiato l'ambito??? da connection string ad utente??
mandami la mail che ti invio qualcosa

------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

DomA Profilo | Expert

>>nelle impostazioni hai cambiato l'ambito?
vergognosamente non l'avevo fatto

campiando Type in string e Scpoe in User funziona tutto.

A presto


Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.

http://www.infomidia.it

Domenico

pieroalampi Profilo | Expert

mi fa piacere sia andato a posto ciao
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

DomA Profilo | Expert



Grazie.


Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.

http://www.infomidia.it

Domenico

Vinsent Profilo | Senior Member

Usare my.settings è la soluzione più semplice ed immediata ma tieni presente che è legata al nome del programma, al percorso ed altri fattori che non ricordo*...in pratica si crea un file "user.config" nella cartella appdata\local\"nome programma"\"ash"\"versione" dell' utente, tale file è un semplice txt con il testo formattato in xml ed il percorso completo è un ash dei fattori di sopra.
Se ad esempio aggiorni il programma e l' exe cambia nome (es." prog v1" a "prog v2") le impostazioni "utente" vanno perse.
Questo è un esempio di un mio vecchio programma:

421x338 43Kb

Dipende da come distribuisci/aggiorni il tuo programma, con clickonce* esistono le funzioni adatte per l' importazione*, mentre io ero riuscito a farlo indicando l' exe da cui importare il file user.config.
Alla fine io ho preferito abbandonare my.settings per dei file xml creati in un percorso "fisso" che leggo e scrivo senza troppi sbattimenti...con la classe dataset.

*non ho voglia di rileggere tutto ma dovrebbe essere scritto in questo link dei miei bookmarks:
http://msdn.microsoft.com/it-it/library/cc185092.aspx#ID0EMF

pieroalampi Profilo | Expert

la cosa è interessante, praticamente se cambi nome al programma va tutto perso? ma in che caso cambi il nome?
------------------------------------------------------
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
------------------------------------------------------

Vinsent Profilo | Senior Member

>la cosa è interessante, praticamente se cambi nome al programma
>va tutto perso? ma in che caso cambi il nome?

Nel mio caso, quando faccio una modifica al programma prendo l' exe dalla cartella debug e lo rinomino con un progressivo per identificare la versione esempio "Programma 1.0.exe", "Programma 1.1.exe", ecc...il discorso del nome mi serve anche per utilizzare il metodo di aggiornamento che ho "inventato"...
Anche non cambiando nome ma modificando la versione direttamente da VS si ha lo stesso effetto, nel link a MSDN sopra c' è un paragrafo che spiega come importare i settings dalla versione precedente, se però creo un nuovo progetto ad esempio per rifare lo stesso programma da zero l' importazione via codice non è più utilizzabile.
Un copia/incolla del file "user.config" non va bene perchè all' interno contiene i riferimenti all' exe che lo ha generato.
L' unica soluzione che avevo trovato era rintracciare il file della versione precedente, leggerlo nodo x nodo e assegnare il valore al settings della nuova versione:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=39387
Nel programma dell' immagine sopra avevo circa 90 settings...una tragedia...quando ho avuto necessità di leggere/salvare dei dati mi sono orientato sugli xml e da li ho abbandonato my.settings.
Alla fin fine è come se utilizzassi i vecchi .ini.
ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5