App.Config e connectionString

giovedì 06 settembre 2007 - 11.43

zactime Profilo | Newbie

Un saluto a tutti.

Portate pazienza perchè sono alle primissime armi con VB 2005 Express e SQL Express 2005.

Se creo un DataSet con Origine Dati -> Aggiungi nuova origine dati ho visto che nel file app.Config e in altri punti del codice generato automaticamente viene creata la stringa di connessione.

La cosa va bene fino ad un certo punto in quanto se il programma finito viene installato su una macchina diversa da quella di sviluppo i parametri di connessione probabilmente non saranno più corretti.

Se non sbaglio agendo manualmente sul file XML App.Config, che verrà rinominato con il nome dell'eseguibile, è possibile correggere i parametri di connessione.
Questo approccio non mi sembra però ne elegante ne percorribile in quanto non è detto che lo sviluppatore sia presente all'installazione.

Pensavo quindi di operare in questo modo :
1 - avvio del programma e tentativo di connessione al database
2 - se il tentativo di connessione fallisce faccio apparire una form dove grazie alla lettura dei parametri di connessione dal file XML App.Config propongo gli stessi all'utente
3 - salvataggio dei nuovi parametri da parte dell'utente e scrittura degli stessi nel file XML App.Config sostituendo i precedenti
4 - nuovo tentativo di connessione. Se non va a buon fine ritorno al punto 2

E' corretto un approccio del genere ? La sezione connectionString contenente la stringa di connessione è in sola lettura o posso anche modificarla ?
Ed inoltre una volta che ho modificato App.Config con i parametri giusti mi funziona correttamente il programma ?
Il dubbio mi viene perchè vedo che con Origine Dati -> Aggiungi nuova origine dati la stringa di connessione appare anche in altri punti del codice generato automaticamente.

Se la risposta è affermativa ad entrambe le domande di cui sopra mi sapreste indicare qualche risorsa sul web per documentarmi su come modificare la stringa di connessione in App.Config da codice. Anche esempi di codice sono graditi.

I suddetti punti 1 e 2 sono riuscito a farli con ConfigurationManager.

Grazie mille anticipatamente.

Oscar

SSUPERPIPPO Profilo | Guru

io solitamente imposto la connessione a runtime.
Se ti può interessare nel mio blog (trovi il link qui sotto), troverai un articolo con una classe completa per la gestione del database che ti semplifica la vita!

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

zactime Profilo | Newbie

>io solitamente imposto la connessione a runtime.
>Se ti può interessare nel mio blog (trovi il link qui sotto),
>troverai un articolo con una classe completa per la gestione
>del database che ti semplifica la vita!
>
>Ciao
>
>Alessandro
>
>http://blogs.dotnethell.it/alebadalin

Grazie Alessandro.

La classe mi sembra molto utile.
Il fatto è che sto facendo le prime prove su VB 2005 e avevo pensato di intrapprendere come strada la creazione da wizzard di un DataSet tipizzato visto che da la comodità di non doversi scrivere il codice per la creazione e ti espone i campi già associati ai rispettivi del Database.

A questo punto, volendo mantenere il DataSet così creato, la classe che tu hai fatto non credo si sposi in pieno. Non perlomeno per la questione della stringa di connessione centralizzata che il wizzard mette nel file XML app.Config. O sbaglio ?

Se sbaglio mi dici come faccio a fare capire al DataSet creato con il wizzard di prendere la stringa di connessione della tua classe invece di quella del app.Config ?
Oppure, se è possibile, come faccio a modificare quella del app.Config ?

L'alternativa credo che sia crearsi e gestirsi tutto a manina : DataSet, DataTable, ecc.

Aprofitta della tua disponibilità per chiarirmi un altro dubbio : è corretto nel DataSet mettere tutte le tabelle del Database ? Anche se sono tante ?

Grazie ancora.

Ciao Oscar

SSUPERPIPPO Profilo | Guru

>Grazie Alessandro.

Di nulla...

>La classe mi sembra molto utile.
>Il fatto è che sto facendo le prime prove su VB 2005 e avevo pensato di intrapprendere come strada la creazione da wizzard di un >DataSet tipizzato visto che da la comodità di non doversi scrivere il codice per la creazione e ti espone i campi già associati ai >rispettivi del Database.

>A questo punto, volendo mantenere il DataSet così creato, la classe che tu hai fatto non credo si sposi in pieno. Non perlomeno per >la questione della stringa di connessione centralizzata che il wizzard mette nel file XML app.Config. O sbaglio ?

>Se sbaglio mi dici come faccio a fare capire al DataSet creato con il wizzard di prendere la stringa di connessione della tua classe >invece di quella del app.Config ?

La classe che ho pubblicato non è stata pensata per l'utilizzo con il wizard.

>Oppure, se è possibile, come faccio a modificare quella del app.Config ?

Non ci sono metodi specifici per farlo, ma essendo un file XML puoi modificarlo facilmente utilizzando (per esempio) XmlDocument...

>L'alternativa credo che sia crearsi e gestirsi tutto a manina : DataSet, DataTable, ecc.

Questa dal mio punto di vista è la soluzione migliore, più flessibile e hai tutto sotto controllo...

>Aprofitta della tua disponibilità per chiarirmi un altro dubbio : è corretto nel DataSet mettere tutte le tabelle del Database ? Anche >se sono tante ?

>Grazie ancora.

Di nulla, ciao
Alessandro


http://blogs.dotnethell.it/alebadalin

zactime Profilo | Newbie

>>Oppure, se è possibile, come faccio a modificare quella del app.Config ?
>
>Non ci sono metodi specifici per farlo, ma essendo un file XML
>puoi modificarlo facilmente utilizzando (per esempio) XmlDocument...

Ci sono riuscito sfruttando ConfigurationManager. Cancello le connectionString esistenti e ne creo una nuova.
Ora mi manca giusto una "finezza" : vorrei considerare la possibilità che ci siano più stringhe di connessione e quindi ricrearle puntando al server corretto. Per fare questo devo salvarmi i nomi delle varie connectionString e relativi DB in una matrice.
Ancora non sono riuscito a costruire il codice giusto per ricavarmi i due dati : nome connectionString e nome DB.
Se hai idee ...


>
>>L'alternativa credo che sia crearsi e gestirsi tutto a manina : DataSet, DataTable, ecc.
>
>Questa dal mio punto di vista è la soluzione migliore, più flessibile
>e hai tutto sotto controllo...

Alla fine .. bah ! Mi sa che comunque, come facevo in VB6, anche qui è meglio farsi tutto a mano.
Volevo infatti provare a crearmi un DataSet con il wizzard (lavoro da pochi minuti) e poi estrapolare più codice possibile per definirlo io a mano.

Grazie ancora.

Ciao Oscar
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5