Scrittura a Runtime di App.Config

giovedì 21 giugno 2007 - 12.26

LeonDom Profilo | Senior Member

Ragazzi,

dovrei scrivere a runtine alcuni parametri... o meglio fare un update...

utilizzo questo schema:
<appSettings>
<add key="Fine" value="1"/>
<add key="Documento" value="2000"/>
</appSettings>

Come faccio a scrivere da codice nel file? E sostituire il value="2000" con un altro valore????

Grazie a tutti
LeonDom

munissor Profilo | Senior Member

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

munissor Profilo | Senior Member

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

LeonDom Profilo | Senior Member

Perfetto...

sto seguendo l'esempio di XMLDocument riportato su questo sito faccio in questo modo...


Dim path As String = "Progetto1.exe.config"
Dim Doc As New XmlDocument() 'istanzio il documento
Doc.Load(path) 'lo carico in memoria
Dim element As XmlElement = Doc.DocumentElement 'recupero il nodo root
Dim node As XmlNode 'recupero il valore all'interno del primo figlio dell'elemento root
For Each node In element.ChildNodes
MessageBox.Show(node.InnerText)
Next

Sembrerebbe che scorra i nodi.... ma nei messagebox non mi compare nulla...

il mio app.config e così...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
</connectionStrings>
<appSettings>
<add key="PercorsoProgramma" value="C:\"/>
<add key="vSorgente" value="C:\"/>
<add key="vDestinazione" value="C:\"/>
<add key="Documento" value="2000"/>
</appSettings>
<system.diagnostics>
<sources>
<!-- Questa sezione definisce la configurazione di registrazione per My.Application.Log -->
<so

etc etc...

Dovrei Scorrere e cambiare il valore di documento, in base a delle ricerche che effettuo in dbase...


LeonDom

munissor Profilo | Senior Member

Ti compare un message box vuoto perchè non c'è un InnerText...

<node>Questo è un inner text</node>
<node><node2></node2></node> <-- Cosi dovresti usare InnerXml

LeonDom Profilo | Senior Member

...grazie innanzitutto...

Infatti con InnerXML mi restituisce il nodo... purtroppo mi restituisce solo il nodo <appSettings> come un'unica stringa... in questo modo come faccio a far visualizzare il nodo figlio add key? ...se non sbaglio devo modificare poi l'attributo del nodo figlio giusto?


******************************************************************************************************
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
</connectionStrings>
<appSettings>
<add key="PercorsoProgramma" value="C:\"/>
<add key="vSorgente" value="C:\"/>
<add key="vDestinazione" value="C:\"/>
<add key="Documento" value="2000"/>
</appSettings>
<system.diagnostics>
<sources>
<!-- Questa sezione definisce la configurazione di registrazione per My.Application.Log -->
<so

etc etc...
********************************************************************************************************
LeonDom

munissor Profilo | Senior Member

Una volta che hai il nodo appConfig puoi ciclare sui figli add... (attenzione che appConfig non ha solo nodi add come sembrerebbe..ci sono anche nodi remove).

Verifichi se esiste un attrbuto "key" (via XmlNode.Attributes) e una volta che trovi l'elemento che ti serve ne modifichi il valore.

ricordati di salvare l'XmlDocument alla fine

LeonDom Profilo | Senior Member

Buongiorno a tutti... approfitto per chiederti questa cosa:

questo è il mio codice....

Try
Dim XmlDoc As New XmlDocument()
XmlDoc.Load(miopercorso\bin\debug\nomeprogramma.exe.config)
For Each xElement As XmlElement In XmlDoc.DocumentElement
If xElement.Name = "appSettings" Then
For Each xNode As XmlNode In xElement.ChildNodes
If xNode.Attributes(0).Value = KeyName Then
xNode.Attributes(1).Value = KeyValue
End If
Next
End If
Next
XmlDoc.Save(miopercorso\bin\debug\nomeprogramma.exe.config)
Catch ex As Exception
MessageBox.Show(ex.ToString())
End Try

Passo a KeyName e a KeyValue i parametri che devo modificare...

....quando trova il nodofiglio appSettings mi va in errore:

"riferimento ad un oggetto non impostato su un'istanza di un oggetto"

che sbaglio?

Grazie a tutti...
LeonDom

munissor Profilo | Senior Member

Dove esattamente ti da errore?

LeonDom Profilo | Senior Member

in questo punto:

If xNode.Attributes(0).Value = KeyName Then
xNode.Attributes(1).Value = KeyValue
End If

cicla gli attributi degli xNode ma quando arriva al KeyName che mi serve modificare in lettura dell'If di genera l'errore...
LeonDom

munissor Profilo | Senior Member

E' un "dettaglio" della specifica XML... in questo xml

<item>
</item>

anche </item> è un nodo.. e non ha attributi (poi gli attributi a loro volta sono nodi..dovresti leggere la specifica XML)

in ogni modo puoi verificare che xNode.NodeType sia uguale a XmlNodeType.Element prima di leggere gli attributi... (e verificare che gli attibuti esistano per nome, non per indice che è rischioso)..

LeonDom Profilo | Senior Member

Grazie munissor,
ci provo, ma tornerò sicuramente a chiederti...
LeonDom
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5