Leggere come XML un database SQL
voyager18 non è online. Ultima attività: 28/08/2008 13.10.33voyager18
Inserito il: 22 luglio 2008 20.13
149 messaggi dal 26 ago 2007 Istalla Microsoft Silverlight!
Ciao vi spiego brevemente cosa devo fare. Ho un database SQL Server e da codice faccio una query per leggere i dati e li salvo su un XmlReader. Il problema viene quando cerco di salvare l'XmlReader in un documento perchè SQL Server mi restituisce un XML di questo tipo:

<row>
   <Colonna1/>
   <Colonna2/>
</row>
<row>
   <Colonna1/>
</row>

Quando cerco di salvarlo in un documento giustamente mi dice che non possono esistere due elementi radice. Ho provato a fare così ma il file che mi salva è vuoto:
SqlConnection Conn = new SqlConnection();
            SqlCommand Cmd = new SqlCommand();
            XmlDocument doc = new XmlDocument();
            string Query = "SELECT * FROM db_datawriter.Articoli FOR XML PATH";
            Conn.ConnectionString = "Stringa di connessione";
            Conn.Open();
            Cmd.CommandType = CommandType.Text;
            Cmd.Connection = Conn;
            Cmd.CommandText = Query;
            XmlReader Read = Cmd.ExecuteXmlReader();
            Conn.Close();
            XmlElement Vetrina = doc.CreateElement("Vetrina");
            Vetrina.InnerXml = Read.ReadInnerXml();
            doc.AppendChild(Vetrina);
            doc.Save(Server.MapPath("vetrina.xml"));

Come posso fare? Grazie!!

Lunga vita e prosperità!!
RE: Leggere come XML un database SQL
vladimiro non è online. Ultima attività: 05/09/2008 8.23.42vladimiro
Inserito il: 23 luglio 2008 01.00
262 messaggi dal 04 ago 2002 Istalla Microsoft Silverlight!
devi prima creare un root element con nome a piacere quindi a fare l'appendchild del root poi fai l'appendchild del tuo Vetrina sull'elemento root.

ciao ciao

RE: Leggere come XML un database SQL
voyager18 non è online. Ultima attività: 28/08/2008 13.10.33voyager18
Inserito il: 23 luglio 2008 08.59
149 messaggi dal 26 ago 2007 Istalla Microsoft Silverlight!
Ok ma quello che non riesco a fare è proprio appendere tutti gli elementi 'row' dal XmlReader e appenderli nell'elemento Vetrina che poi a sua volta verrà appeso come DocumentElement nel XmlDocument. Potresti farmi un piccolo esempio? Grazie..

Modificato da voyager18 il 23 luglio 2008 12.12 -

Lunga vita e prosperità!!
RE: Leggere come XML un database SQL
voyager18 non è online. Ultima attività: 28/08/2008 13.10.33voyager18
Inserito il: 23 luglio 2008 17.17
149 messaggi dal 26 ago 2007 Istalla Microsoft Silverlight!
Chi mi sa aiutare??

Lunga vita e prosperità!!
RE: Leggere come XML un database SQL
mike_nudget non è online. Ultima attività: 28/07/2008 14.09.52mike_nudget
Inserito il: 23 luglio 2008 18.35
41 messaggi dal 19 feb 2007 Istalla Microsoft Silverlight!
Credo il problema sia dovuto all'assenza del nodo radice nell' XML in output dal DB.
XmlReader.ReadInnerXML() restituisce una stringa vuota quando non riesce a trovare un nodo radice da cui estrapolare l'"InnerXML".
RE: Leggere come XML un database SQL
voyager18 non è online. Ultima attività: 28/08/2008 13.10.33voyager18
Inserito il: 23 luglio 2008 20.18
149 messaggi dal 26 ago 2007 Istalla Microsoft Silverlight!
E come posso fare allora??

Lunga vita e prosperità!!
RE: Leggere come XML un database SQL
mike_nudget non è online. Ultima attività: 28/07/2008 14.09.52mike_nudget
Inserito il: 24 luglio 2008 09.27
41 messaggi dal 19 feb 2007 Istalla Microsoft Silverlight!
Potresti utilizzare un oggetto SqlDataReader in modo da farti restituire le colonne che ti interessano come sottoforma di string.
Per ottenere un unica stringa XML puoi utilizzare un oggetto StringBuilder.

Ad esempio:

StringBuilder xmlString = new StringBuilder();

using(IDataReader rd = TuoSqlCommand.ExecuteReader())
{
while(rd.Read())
{
xmlString.Append(rd["<nome-colonna-dati-xml>"];
}

rd.close();
}

In questo modo chiamando xmlString.ToString() dovresti ottenere una unica stringa contenente i dati XML che ti interessano.
A questo punto procedi come hai già fatto.

Spero ti risolva il problema :)
RE: Leggere come XML un database SQL
voyager18 non è online. Ultima attività: 28/08/2008 13.10.33voyager18
Inserito il: 24 luglio 2008 11.49
149 messaggi dal 26 ago 2007 Istalla Microsoft Silverlight!
Ho risolto così:
SqlConnection Conn = new SqlConnection();
            SqlCommand Cmd = new SqlCommand();
            XmlDocument OggettiInVetrina = new XmlDocument();
            string Query = "SELECT * FROM Tabella FOR XML PATH, ROOT('Vetrina')";
            Conn.ConnectionString = "Connessione";
            Conn.Open();
            Cmd.CommandType = CommandType.Text;
            Cmd.Connection = Conn;
            Cmd.CommandText = Query;
            XmlReader Read = Cmd.ExecuteXmlReader();
            Conn.Close();
            OggettiInVetrina.Load(Read);
            Random Rnd = new Random();
            XmlElement RootVetrina = OggettiInVetrina.CreateElement("Rootvetrina");
            int i;
            ArrayList Row = new ArrayList();
            for (i = 0; i < OggettiInVetrina.DocumentElement.ChildNodes.Count; i++)
            {
                Row.Add(OggettiInVetrina.DocumentElement.ChildNodes[i]);
            }
            for (i = 0; i < 9; i++)
            {
                RootVetrina.AppendChild((XmlElement)Row[Rnd.Next(Row.Count - 1)]);
            }
            XmlDocument Vetrina = new XmlDocument();
            Vetrina.AppendChild(RootVetrina);
            Vetrina.Save(Server.MapPath("prova.xml"));

Però ora quando vado a fare RootVetrina.AppenaChild mi da questo errore:
The node to be inserted is from a different document context.

Che vuol dire??

Lunga vita e prosperità!!


Pagine: [1] 2 3 Avanti >>
Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


maltra - 641 pt
vladimiro - 461 pt
fabrica - 180 pt

Ultimi vincitori: fabrica, vladimiro, PeppeDotNet

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008 + Windows Server 2008, ReShaper e 1 ebook!



COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums