Problema scrittura XML

giovedì 13 novembre 2008 - 15.34

HavanaMan Profilo | Junior Member

Ciao, torno a rompervi un po'...

ho un problema per la gestione di un file XML.

io faccio così:

Dim ds As New DataSet
ds.DataSetName = "server"
For i = 0 To dgvServerSalvati.Rows.Count - 1
ds.Tables.Add("storedconnection")
ds.Tables("storedconnection").Columns.Add("nome")
ds.Tables("storedconnection").Columns.Add("server")
ds.Tables("storedconnection").Columns.Add("db")
ds.Tables("storedconnection").Columns.Add("username")
Dim rowValss(3) As String
rowValss(0) = dgvServerSalvati.Rows(i).Cells(0).Value
rowValss(1) = dgvServerSalvati.Rows(i).Cells(1).Value
rowValss(2) = dgvServerSalvati.Rows(i).Cells(2).Value
rowValss(3) = dgvServerSalvati.Rows(i).Cells(3).Value
ds.Tables("storedconnection").Rows.Add(rowValss)
Next
ds.WriteXml(Application.StartupPath + "\xml\login.xml")

ma mi dice: "Un DataTable di nome 'storedconnection' appartiene già a questo DataSet."

qualcuno che ha qualche suggerimento?

Perchè in lettura funziona perfettamente un file

grazie in anticipo

ciao
Luca

0v3rCl0ck Profilo | Guru

>Ciao, torno a rompervi un po'...

Ciao

>
>ho un problema per la gestione di un file XML.
>
>io faccio così:
>
> Dim ds As New DataSet
> ds.DataSetName = "server"
> For i = 0 To dgvServerSalvati.Rows.Count - 1
> ds.Tables.Add("storedconnection")
>ds.Tables("storedconnection").Columns.Add("nome")
>ds.Tables("storedconnection").Columns.Add("server")
> ds.Tables("storedconnection").Columns.Add("db")
>ds.Tables("storedconnection").Columns.Add("username")
> Dim rowValss(3) As String
>rowValss(0) = dgvServerSalvati.Rows(i).Cells(0).Value
>rowValss(1) = dgvServerSalvati.Rows(i).Cells(1).Value
>rowValss(2) = dgvServerSalvati.Rows(i).Cells(2).Value
>rowValss(3) = dgvServerSalvati.Rows(i).Cells(3).Value
> ds.Tables("storedconnection").Rows.Add(rowValss)
> Next
>ds.WriteXml(Application.StartupPath + "\xml\login.xml")
>
>ma mi dice: "Un DataTable di nome 'storedconnection' appartiene
>già a questo DataSet."
>
>qualcuno che ha qualche suggerimento?

Non puoi assegnare più di un datatable con lo stesso nome ad un dataset.

Guarda l'esempio corretto:

Dim ds As New DataSet ds.DataSetName = "server" ' NOTE: Qui potresti utilizzare anche il costrutto For Each For i = 0 To dgvServerSalvati.Rows.Count - 1 Dim dt As New DataTable() ds.Tables.Add(dt) ' NOTE: !!! Specifica sempre il tipo delle colonne !!! dt.Columns.Add("nome", GetType(String)) dt.Columns.Add("server", GetType(String)) dt.Columns.Add("db", GetType(String)) dt.Columns.Add("username", GetType(String)) dt.Rows.Add( dgvServerSalvati.Rows(i).Cells(0).Value, _ dgvServerSalvati.Rows(i).Cells(1).Value, _ dgvServerSalvati.Rows(i).Cells(2).Value, _ dgvServerSalvati.Rows(i).Cells(3).Value) Next

Il "New DataTable" sceglierà per te il nome da dare al datatable (DataTable1, DataTable2, DataTable3, ecc...), se tu volessi dargli un nome sensato dovresti cambiarlo tutte le volte, ad esempio apponendo un indice al nome predefinito (es.: String.Format("storedconnection{0}", IndiceTabella)).

>
>Perchè in lettura funziona perfettamente un file
>
>grazie in anticipo

Enjoy It

>
>ciao
>Luca

Ciao ciao

- Michael -
http://blogs.dotnethell.it/Regulator/

HavanaMan Profilo | Junior Member

grazie stasera provo

cmq scusate il triplo post ma mi dava errore :(

ho provato ora, per scrivere scrive ma mi fa questo schema:

<server>
<Table1>
<nome>ciaociao</nome>
<server>ciaociao</server>
<db>ciaociao</db>
<username>ciaociao</username>
</Table1>
<Table2>
<nome>prova</nome>
<server>prova</server>
<db>prova</db>
<username>prova</username>
</Table2>
</server>

non si puo chiamare diversamente TABLE1 e TABLE2? e sopratutto io prima li leggevo cosi:

ds.ReadXml(Application.StartupPath + "\xml\login.xml")

For i = 0 To ds.Tables("storedconnection").Rows.Count - 1
cboxConnection.Items.Add(ds.Tables("storedconnection").Rows(i).Item("nome"))
dgvServerSalvati.Rows.Add(ds.Tables("storedconnection").Rows(i).Item("nome"), ds.Tables("storedconnection").Rows(i).Item("server"), ds.Tables("storedconnection").Rows(i).Item("db"), ds.Tables("storedconnection").Rows(i).Item("username"))
Next

ma a sto punto non funziona piu

0v3rCl0ck Profilo | Guru

Fammi sapere se poi è tutto a posto, accetta il thread che lo chiudiamo.

Ciaooo

- Michael -
http://blogs.dotnethell.it/Regulator/

HavanaMan Profilo | Junior Member

non sono riuscito a risolvere il problema della lettura :(

0v3rCl0ck Profilo | Guru

>grazie stasera provo
>
>cmq scusate il triplo post ma mi dava errore :(
>
>ho provato ora, per scrivere scrive ma mi fa questo schema:
>
><server>
> <Table1>
> <nome>ciaociao</nome>
> <server>ciaociao</server>
> <db>ciaociao</db>
> <username>ciaociao</username>
> </Table1>
> <Table2>
> <nome>prova</nome>
> <server>prova</server>
> <db>prova</db>
> <username>prova</username>
> </Table2>
></server>
>
>non si puo chiamare diversamente TABLE1 e TABLE2? e sopratutto
>io prima li leggevo cosi:

Si, le puoi chiamare diversamente, ma come ti dicevo nel post precedente i nomi devono essere univoci. Quindi non puoi chiamarli entrambi "storedconnection" altrimenti tanto varrebbe che tu mettessi tutti i dati dentro allo stesso datatable. Sei sicuro che ti servono più datatable? Conosci la differenza tra dataset, datatable e datarow? Perchè nel codice che avevi scritto all'inizio ogni riga della griglia creava un datatable con una riga...

Forse invece tu volevi fare una cosa di questo tipo:

' Creo il nuovo dataset Dim ds As New DataSet("server") ' Creo il nuovo datatable Dim dt As New DataTable("storedconnection") ' NOTE: !!! Specifica sempre il tipo delle colonne !!! dt.Columns.Add("nome", GetType(String)) dt.Columns.Add("server", GetType(String)) dt.Columns.Add("db", GetType(String)) dt.Columns.Add("username", GetType(String)) ' Aggiungo la tabella al dataset ds.Tables.Add(dt) ' NOTE: Qui potresti utilizzare anche il costrutto For Each For i = 0 To dgvServerSalvati.Rows.Count - 1 dt.Rows.Add( dgvServerSalvati.Rows(i).Cells(0).Value, _ dgvServerSalvati.Rows(i).Cells(1).Value, _ dgvServerSalvati.Rows(i).Cells(2).Value, _ dgvServerSalvati.Rows(i).Cells(3).Value) Next

In quest'ultimo esempio, tutte le righe della griglia vengono aggiunte ad un solo datatable che si chiama appunto "storedconnection", in questo modo quando stamperai l'xml dovrai avere una situazione del genere:

<server> <storedconnection> <nome>ciaociao</nome> <server>ciaociao</server> <db>ciaociao</db> <username>ciaociao</username> </storedconnection> <storedconnection> <nome>prova</nome> <server>prova</server> <db>prova</db> <username>prova</username> </storedconnection> </server>

>
>ds.ReadXml(Application.StartupPath + "\xml\login.xml")
>
>For i = 0 To ds.Tables("storedconnection").Rows.Count - 1
>cboxConnection.Items.Add(ds.Tables("storedconnection").Rows(i).Item("nome"))
>dgvServerSalvati.Rows.Add(ds.Tables("storedconnection").Rows(i).Item("nome"),
>ds.Tables("storedconnection").Rows(i).Item("server"), ds.Tables("storedconnection").Rows(i).Item("db"),
>ds.Tables("storedconnection").Rows(i).Item("username"))
> Next
>
>ma a sto punto non funziona piu

Dovrei avere capito meglio cosa volevi fare , prova l'esempio sopra e dovrebbe andarti tutto.

Enjoy It

- Michael -
http://blogs.dotnethell.it/Regulator/

HavanaMan Profilo | Junior Member

GRANDE è quello che voltevo

grazie mille

thread accettato!

0v3rCl0ck Profilo | Guru

>GRANDE è quello che voltevo

Benissimo, bravo!

>
>grazie mille

Di niente, alla prossima

>
>thread accettato!

Grazie

ciaoooo

- Michael -
http://blogs.dotnethell.it/Regulator/
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