Da dataset a file xml

giovedì 07 agosto 2008 - 09.05

memmo77 Profilo | Expert

Salve, come posso "rovesciare" tutto un dataset in un file xml? La struttura dell'xml dovrei crearla prima o lo crea il dataset al momento del "travaso". Avete qualche dritta?
Grazie ciao.

alx_81 Profilo | Guru

>Salve,
Ciao!

>come posso "rovesciare" tutto un dataset in un file xml?
>La struttura dell'xml dovrei crearla prima o lo crea il dataset
>al momento del "travaso". Avete qualche dritta?
Che ne dici di usare il seguente metodo?

DataSet.GetXML Method
http://msdn.microsoft.com/en-us/library/system.data.dataset.getxml.aspx

>Grazie ciao.
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

rossimarko Profilo | Guru

Ciao,

il DataSet possiede due metodi
- WriteXml: http://support.microsoft.com/kb/309183 o http://msdn.microsoft.com/en-us/library/system.data.dataset.writexml.aspx
- GetXml: http://msdn.microsoft.com/en-us/library/system.data.dataset.getxml.aspx

che ti consentono di creare un file xml o prelevare una stringa con l'xml.

Updated: scusa ale, non avevo visto che avevi già postato


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

alx_81 Profilo | Guru

>Updated: scusa ale, non avevo visto che avevi già postato
è un forum, e hai aggiunto un metodo
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Grazie mille ragazzi. Mi metto subito a provarlo. Ma intanto vi pongo la domanda inversa. Diciamo che una volta creato l'xml potrei avere la necessità di ricaricarlo nel dataset che metodo uso per questo? Grazie davvero

alx_81 Profilo | Guru

> Grazie mille ragazzi. Mi metto subito a provarlo. Ma intanto
>vi pongo la domanda inversa. Diciamo che una volta creato l'xml
>potrei avere la necessità di ricaricarlo nel dataset che metodo
>uso per questo?

DataSet.ReadXml Method
http://msdn.microsoft.com/en-us/library/360dye2a.aspx

>Grazie davvero
Di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Allora, non ho utilizzato il metodo che mi hai detto, anche se me lo sono spulciato per benino ;).
Ho utilizzato un ssis . Ora mi chiedevo, ho fatto un file.raw che contiene tutti i dati della mia tabella. Posso in qualche modo compattarlo in un file rar o zip direttamente nel ssis senza passare da asp net? Grazie mille di nuovo,

ps. lo sai che adoro i ssis

alx_81 Profilo | Guru

>Allora, non ho utilizzato il metodo che mi hai detto, anche se
>me lo sono spulciato per benino ;).
>Ho utilizzato un ssis . Ora mi chiedevo, ho fatto un file.raw
>che contiene tutti i dati della mia tabella. Posso in qualche
>modo compattarlo in un file rar o zip direttamente nel ssis senza
>passare da asp net?
Facciamo così, visto che improvvisamente il sistema e l'ambiente sono cambiati.. Illustrami per bene quello che devi fare che cerchiamo di capire come ottimizzare con SSIS, a meno che tu non abbia già fatto al meglio

Grazie mille di nuovo,
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Allora mettiti comodo .
Ho messo uno script all'inizio nel quale testo una variabile di nome backup. Se true faccio partire il dataflow backup altrimenti faccio partire il dataflow ripristino. E fino a qui tutto ok.

Nel backup, faccio la select di quello che devo salvare con una origine ole db e me la sparo su un file.raw.
Nel ripristino, faccio prima una delete della select precedente e poi risparo il mio file.raw nella tabella.
E fin qui tutto ok.

Ora, il file.raw che mi si genera viene di circa 100 mb. Siccome nel corso della procedura, potrebbe capitare che il processo si ripeta + volte, vorrei comprimere il file.raw in file.rar e viceversa quando devo ripristinarlo.

Da asp.net avrei una procedura per farlo, ma visto che sono nel ssis, mi chiedevo se potevo farlo qui dentro.
Oppure, metto il codice che utilizzo su asp.net in uno script ssis?
Cosa mi consigli?Spero di essermi spiegato. Grazie

alx_81 Profilo | Guru

>Ora, il file.raw che mi si genera viene di circa 100 mb. Siccome
>nel corso della procedura, potrebbe capitare che il processo
>si ripeta + volte, vorrei comprimere il file.raw in file.rar
>e viceversa quando devo ripristinarlo.
La scelta di raw è dovuta a?

>metto il codice che utilizzo su asp.net in uno script
>ssis?
Di solito io uso gzip (http://www.gzip.org). Metto il file in una cartella di utilità (gzip.exe) e poi con un Execute Process Task, parametrizzando gli argomenti, comprimo, magari ruotando se mi servono più versioni del backup..

Se vuoi ho un post sul mio blog dove parlo di Execute Process Task:
http://blogs.dotnethell.it/suxstellino/Altri-Task-del-Control-Flow__4148.aspx


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

>La scelta di raw è dovuta a?
Solo al fatto che posso passare una mia variabile come percorso e nome del file. Me lo creo di volta in volta con nome diverso da asp.net, o c'è la possibilità di crearlo da ssis?

>Di solito io uso gzip (http://www.gzip.org). Metto il file in una cartella di utilità (gzip.exe) e poi con un Execute Process Task, parametrizzando gli >argomenti, comprimo, magari ruotando se mi servono più versioni del backup..
Gzip mi permetterebbe di compattare e scompattare? Ti spiego, come ho fatto per altri due ssis, io li avviero da asp.net passando le mie variabili. E funzionano perfettamente. Il gzip.exe dove dovrei metterlo? Lo metto nel mio "sito"

>Se vuoi ho un post sul mio blog dove parlo di Execute Process Task:
>http://blogs.dotnethell.it/suxstellino/Altri-Task-del-Control-Flow__4148.aspx
Me lo guardo faccio due prove e ti faccio sapere. Ciao

ps.hai qualche esempio sull'utilizzo del gzip nei ssis? Ciao

alx_81 Profilo | Guru

>Solo al fatto che posso passare una mia variabile come percorso
>e nome del file. Me lo creo di volta in volta con nome diverso
>da asp.net, o c'è la possibilità di crearlo da ssis?
Eccome.. puoi farlo da SSIS. Puoi seguire varie strade. I nomi dei file in base a cosa li componi? Li hai i una tabella? Li leggi da un XML? Li crei in base ad un timestamp?

>Gzip mi permetterebbe di compattare e scompattare?
Certo, è proprio uno zipper. Parametro -d decomprime, altrimenti comprime. Puoi definire il nome dei file ed i percorsi, direttamente da linea di comando.

>ps.hai qualche esempio sull'utilizzo del gzip nei ssis? Ciao
Posso fartelo, per ora risolviamo le cose a monte, magari cercando di allontanarci da asp.net se possibile..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

>Eccome.. puoi farlo da SSIS. Puoi seguire varie strade. I nomi dei file in base a cosa li componi? Li hai i una tabella? Li leggi da un XML? Li crei in
>base ad un timestamp?
Il nome del file mi arriva come variabile @path . Come posso crearlo?

>Certo, è proprio uno zipper. Parametro -d decomprime, altrimenti comprime. Puoi definire il nome dei file ed i percorsi, direttamente da linea di >comando.
Come imposto il -d e come passo il nome dei file ed i percorsi da riga di comando?

>Posso fartelo, per ora risolviamo le cose a monte, magari cercando di allontanarci da asp.net se possibile..
Magari

La voce Executable e Arguments, non possono essere parametrizzabili? A funzionare funziona ma mi vedo costretto a specificare un percorso e per il gzip.exe e per il mio file.raw, non posso passare delle variabili? Ciao


OKOKOKOK UTILIZZANDO LE EXPRESSION MI SEMBRA DI RISOLVERE TUTTO...

alx_81 Profilo | Guru

>Il nome del file mi arriva come variabile @path . Come posso crearlo?
Sì ma la variabile ti arriva dal chiamante del ssis? Chi è il chiamante?
>
>Come imposto il -d e come passo il nome dei file ed i percorsi da riga di comando?
qui basta utilizzare, se non ricordo male la sintassi: gzip [OPTION] [NOMEFILE]
Nessuna opzione per il compress, -d per il decompress..
riferisciti alla guida con gzip --help da linea di comando.
>
>La voce Executable e Arguments, non possono essere parametrizzabili?
>A funzionare funziona ma mi vedo costretto a specificare un percorso
>e per il gzip.exe e per il mio file.raw, non posso passare delle
>variabili? Ciao
Certo che puoi. Con SSIS si sono introdotte le Expressions. leggi questo mio post:
http://blogs.dotnethell.it/suxstellino/Le-Expressions__4228.aspx

Sono proprietà dinamiche valorizzabili a runtime. Hanno a mio avviso un grosso difetto.. Non si notano quando sono immesse e quindi a distanza di giorni potresti già scordarti "dove è che cambia una certa cosa". Però sono molto efficaci..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Il chiamante del ssis è una procedura asp.net che passa le variabili necessarie.
Due problemini.
1- se il file compresso esiste e lo rilancio va in errore, quindi dovrei prima controllarne l'esistenza e cancellarlo
2- Come creo a runtime i miei file raw?

Tramite espression posso quindi passere tutti gli argomenti che voglio in modo dinamico, compreso il percorso del file gzip.exe giusto?
Grazie mille di nuovo, sei un grande ;)

memmo77 Profilo | Expert

Allora, ora mi succede questo. Creo il mio test.raw.gz passando per il backup. Quando tento però il ripristino, che dovrebbe leggere il test.raw, mi va in "bomba" perchè ovviamente il task origine file elaborato, vuole quel file. Ho provato ad impostare la proprietà ValidateExternalMetadata a false ma nulla . Che posso fare?

alx_81 Profilo | Guru

>Il chiamante del ssis è una procedura asp.net che passa le variabili necessarie.
Quindi da asp chiami il SSIS o accodi dei record in una tabella come dicevamo in un vecchio post?

>Due problemini.
>1- se il file compresso esiste e lo rilancio va in errore, quindi dovrei prima controllarne l'esistenza e cancellarlo
E questo lo puoi fare tramite script task usando il namespace System.IO

>2- Come creo a runtime i miei file raw?
Con l'execute process e la parametrizzazione del nome del file negli arguments, non vedo il problema

>Tramite espression posso quindi passere tutti gli argomenti che voglio in modo dinamico, compreso il percorso del file gzip.exe giusto?
Non tutte le proprietà di ogni task sono realmente impostabili. Però molte, sì.

>Allora, ora mi succede questo. Creo il mio test.raw.gz passando
>per il backup. Quando tento però il ripristino, che dovrebbe
>leggere il test.raw, mi va in "bomba" perchè ovviamente il task
>origine file elaborato, vuole quel file. Ho provato ad impostare
>la proprietà ValidateExternalMetadata a false ma nulla .
Basta che nella procedura di restore, unzippi il file e assegni tramite expression la connectionstring del connection manager al file raw.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

>Quindi da asp chiami il SSIS o accodi dei record in una tabella come dicevamo in un vecchio post?
Si proprio così

>E questo lo puoi fare tramite script task usando il namespace System.IO
Ok risolto

>Con l'execute process e la parametrizzazione del nome del file negli arguments, non vedo il problema
Lo creo con lo script con file.create che ne dici?

>Basta che nella procedura di restore, unzippi il file e assegni tramite expression la connectionstring del connection manager al file raw.
Nell'origine file.raw non trovo come impostare una connessione, nell'access mode gli passo una variabile col path del file, ma va in errore se al momento dell'avvio del ssis non si trova il file che invece è ancora compresso.

Scusa se sono di "crognolo" . Grazie

alx_81 Profilo | Guru

>Con l'execute process posso creare file.raw e come? Sempre utilizzando gzip.exe??? Non ho capito bene questo passo
No, il file lo devi creare con un dataflow.

>Nell'origine file.raw non trovo come impostare una connessione, nell'access mode gli passo una variabile col path del file, ma
>va in errore se al momento dell'avvio del ssis non si trova il file che invece è ancora compresso.
Per questo ti faccio un semplice esempio appena trovo un minuto..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Okkkk me ne resto buono fino all'esempio. Ma perchè non posso crearlo con lo sript e devo crearlo nel dataflow?
Potrai rispondere quando mi darai anche l'esempio . Scherzo ovvio.
grrrrrrrrrrrrrrrrrazieeeeeee

alx_81 Profilo | Guru

>Okkkk me ne resto buono fino all'esempio. Ma perchè non posso
>crearlo con lo sript e devo crearlo nel dataflow?
Puoi crearlo da script.. ma se parli di 100MB non so se ci sono trasformazioni..
Puoi fare come meglio credi..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Nono all'inzio lo creo vuoto, se non c'è, poi lo riempio con la destinazione file non elaborato . quindi all'inizio peserebbe 0, una volta riempito diventa di 100 mb circa. Funziona tutto, solo mi blocca la partenza del ssis se il file.raw non esiste all'inizio per il task origine/destinazione file non elaborato.


760x562 164Kb

alx_81 Profilo | Guru

>Nono all'inzio lo creo vuoto, se non c'è, poi lo riempio con
>la destinazione file non elaborato . quindi all'inizio peserebbe
>0, una volta riempito diventa di 100 mb circa. Funziona tutto,
>solo mi blocca la partenza del ssis se il file.raw non esiste
>all'inizio per il task origine/destinazione file non elaborato.
secondo me con il ValidateExternalMetadata a false sul connection manager e sulla sorgente e sula dataflow, non dovresti aver problemi.. l'importante è che il file ci sia quando disegni l'applicazione..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

>secondo me con il ValidateExternalMetadata a false sul connection manager e sulla sorgente e sula dataflow, non dovresti aver problemi.. l'importante è >che il file ci sia quando disegni l'applicazione..
La proprietà ValidateExternalMetadata sull'origine file non elaborato è false, ma non uso una connection manager passo il nome del file da una variabile, anche perchè non trovo come associare una connection manager all'origine file non elaborato
Per il dataflow lo stesso, non trovo la proprietà ValidateExternalMetadata.
Come posso fare? Dove posso attribuire al task origine file non elaborato una mia connection manager? Grazie ciao

alx_81 Profilo | Guru

>>secondo me con il ValidateExternalMetadata a false sul connection manager e sulla sorgente e sula dataflow, non dovresti aver problemi.. l'importante è >che il file ci sia quando disegni l'applicazione..
>La proprietà ValidateExternalMetadata sull'origine file non elaborato
>è false, ma non uso una connection manager passo il nome del
>file da una variabile, anche perchè non trovo come associare
>una connection manager all'origine file non elaborato
>Per il dataflow lo stesso, non trovo la proprietà ValidateExternalMetadata.
>Come posso fare? Dove posso attribuire al task origine file non
>elaborato una mia connection manager? Grazie ciao
Dai, ti faccio un esempio. Dimmi esattamente che esempio ti servirebbe.. gli step sensibili, così tra oggi e domani ti faccio qualcosa..
ciao!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

Allora, in sostanza io dovrei lanciare il ssis al quale passare il nome del file che ancora non esiste, ma deve essere creato. una volta creato lo riempio dei dati di una tabella, quindi lo utilizzo come destinazione. Dopo di che lo compatto con gzip. Poi mi servirebbe di ripristinare il contenuto di questo file, scompattandolo e "risparandolo" dentro la tabella.
Tutto questo funziona perfettamente, l'unica cosa che non riesco a fare è, lanciare il ssis quando il file.raw fisicamente non esiste. Altrimenti avrei risolto.
Grazie ciao

memmo77 Profilo | Expert

Non riesco ancora a sbloccarmi. Mica hai l'esempio che mi dicevi? .
Un altra domanda. se ho una suddivisione condizionale con una condizione sola e dovessi andare avanti se questa è soddisfatta, nel caso in cui non lo fosse, il ssis continuerebbe l'elaborazione uscendo al data_flow successivo o mi si bloccherebbe? E se fosse , c'è una sorta di exit da mettere come task alternativo alla condizione non soddisfatta?
Mamma mia speriamo hai capito cosa intendo, a rileggere ho problemi io . Grazie ciao

alx_81 Profilo | Guru

>Non riesco ancora a sbloccarmi. Mica hai l'esempio che mi dicevi?
>.
Sto lavorando.. mi ci vuole un po'.. Per cortesia abbi pazienza.. non è una semplice risposta su un forum questa. Sto facendo il ssis, ma devi avere pazienza.

>Un altra domanda. se ho una suddivisione condizionale con una
>condizione sola e dovessi andare avanti se questa è soddisfatta,
>nel caso in cui non lo fosse, il ssis continuerebbe l'elaborazione
>uscendo al data_flow successivo o mi si bloccherebbe?
Va al successivo, no problem


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

>Sto lavorando.. mi ci vuole un po'.. Per cortesia abbi pazienza.. non è una semplice risposta su un forum questa. Sto facendo il ssis, ma devi avere >pazienza.
Ok ok scusa non volevo metterti ansia, er a+ che altro per fare l'altra domanda. Non ti preoccupare , anzi, scusami

>Va al successivo, no problem
ok perfetto

Grazie

memmo77 Profilo | Expert

Ho risolto, bastava mettere la proprietà DelayValidation del flusso di controllo = true. Ora sembra andare alla grande.
Grazie mille e della pazienza e della disponibilità. Se non lo hai fatto, non perdere tempo con l'esempio. Rigrazie ciao

alx_81 Profilo | Guru

>Ho risolto, bastava mettere la proprietà DelayValidation del
>flusso di controllo = true. Ora sembra andare alla grande.
>Grazie mille e della pazienza e della disponibilità. Se non lo
>hai fatto, non perdere tempo con l'esempio. Rigrazie ciao
L'ho quasi finito e cmq può esserti utile..
Quando ho scritto ValidateExternalMetadata, credimi, intendevo DelayValidation .. che sbadato.. brutto periodo

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

alx_81 Profilo | Guru

Eccotelo..
giusto per chiarire, ValidateExternalMetadata è una proprietà che serve per validare o meno a design time i metadati ma all'interno di un data flow:
http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dts.pipeline.wrapper.idtscomponentmetadata90.validateexternalmetadata.aspx

Spero che cmq l'esempio possa esserti di aiuto.
ciao!

e se ritieni che ti sia servito, accetta la risposta così chiudiamo il thread
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

memmo77 Profilo | Expert

ooooook, mi piacerebbe dire a buon rendere ma viste le cose, tieniti sempre pronto a nuovi quesiti . grazie 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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5