Insert/Update da file XML

domenica 09 novembre 2014 - 19.02

gsistemi Profilo | Junior Member

Ho un file XML strutturato così:

<row>
<idcontent>10</idcontent>
<cat>A</cat>
<val>77</val>
<iduser>1</iduser>
</row>
<row>
<idcontent>10</idcontent>
<cat>B</cat>
<val>66</val>
<iduser>1</iduser>
</row>
<row>
<idcontent>10</idcontent>
<cat>C</cat>
<val>88</val>
<iduser>1</iduser>
</row>

lo passo ad una funzione vb.net per aggiornare/inserire i voti in questa tabella:

Tabella
ID | IDCONTENT | CAT | VAL | IDUSER

Vorrei sapere se esiste una funzione SQL che mi permette di fare INSERT dei record nuovi e UPDATE dei record già esistenti in base ai dati del file XML.
Importante! Non posso usare la funzione MERGE perchè il DB che uso non è compatibile con SQL SERVER 2008.

Grazie!

alx_81 Profilo | Guru

>lo passo ad una funzione vb.net per aggiornare/inserire i voti in questa tabella:
>Vorrei sapere se esiste una funzione SQL che mi permette di fare
>INSERT dei record nuovi e UPDATE dei record già esistenti in
>base ai dati del file XML.
>Importante! Non posso usare la funzione MERGE perchè il DB che
>uso non è compatibile con SQL SERVER 2008.
Personalmente ritengo che da quel file XML sia meglio creare una lista di oggetti tuoi, e poi lanciare la insert/update una per volta, evitando di passare l'oggettone al tuo db, soprattutto se non puoi avere SQL Server.
A meno che il db che usi non ti consenta di avere Table Value Parameters. Fai attenzione però, perchè se usi ADO.Net e se la libreria che si connette al tuo db non li supporta, non ne vieni fuori.

>Grazie!
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

gsistemi Profilo | Junior Member

Non ho capito granchè ma la colpa è mia!

Provo a spiegarmi meglio che forse non sono stato chiaro.
Ho un DB Sql Server ma non compatibile con il 2008, versione in cui è stata introdotta l'istruzione MERGE, con la quale riesco a gestire il problema che ho descritto.
Passo il file XML perchè so che è un file di piccole dimensioni e così riesco a gestire meglio la risposta all'utente perchè il "return" dal servizio web che uso mi arriva solo quando l'intera istruzione è completata.

In pratica l'utente fa una votazione su 8 argomenti, invece che passare un valore per volta, vorrei passare tutto in un unico file XML e inserire/aggiornare i record nel DB in base all'esistenza o meno della votazione.

Potrei leggere il file XML da vb.net e fare 8 insert/update ma vorrei sapere se c'è una soluzione più "elegante"!

alx_81 Profilo | Guru

>Potrei leggere il file XML da vb.net e fare 8 insert/update ma
>vorrei sapere se c'è una soluzione più "elegante"!
quello che ti dicevo è di parsare il file xml, ciclarlo e fare n insert. Se proprio vuoi fare la insert massiva, leggendo l'xml puoi andare a creare un datatable e passarlo ad una stored procedure che si aspetta una tabella come parametro.
Purtroppo con le versioni precedenti a 2008 questo non è possibile, allora ci sono workaround come questo:
https://itworksonmymachine.wordpress.com/2008/08/03/table-valued-parameter-in-sql-server-2005/

Personalmente, per così poche votazioni, farei 8 insert, magari sotto TransactionScope.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222
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