Import xml, cosa lo fa schiantare?

mercoledì 19 novembre 2008 - 16.57

stuzzo Profilo | Junior Member

Salve a tutti!
Mi trovo in una situazione particolare.
Devo importare un file xml nella mia applicazione, ma nel momento che va a scrivere i dati sul db ad un certo punto appare questo errore..
Dati di tipo string o binary che verrebbero troncati.
L'istruzione è stata interrotta.
Il fatto strano è che mi schianta solo per alcuni voci, sono riuscito anche a mettere qualcosa come 300 voci, prima che mi schiantasse. Sicuramente è un problema con qualche carattere o che diavolo ne so :).
Sto impazzendo perchè non riesco a capire dove possa essere l'errore. Vi posto anche un po' di trace.
Premetto che utilizzo NHibernate per la scrittura sul db, ma come ripeto non penso sia lui il problema, visto che ho inserito correttamente numerose voci.
could not insert: [sito.annuncio][SQL: INSERT INTO Annuncio (CodiceAnnuncio, DataInserimento, Titolo, Testo, Cerco, NumeroVisite, Pubblicabile, Validato) VALUES (?, ?, ?, ?, ?, ?, ?, ?)]
in NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session)
in NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session)
in NHibernate.Impl.ScheduledIdentityInsertion.Execute()
in NHibernate.Impl.SessionImpl.Execute(IExecutable executable)
in NHibernate.Impl.SessionImpl.DoSave(Object theObj, EntityKey key, IEntityPersister persister, Boolean replicate, Boolean useIdentityColumn, CascadingAction cascadeAction, Object anything)
in NHibernate.Impl.SessionImpl.DoSave(Object obj, Object id, IEntityPersister persister, Boolean useIdentityColumn, CascadingAction cascadeAction, Object anything)
in NHibernate.Impl.SessionImpl.SaveWithGeneratedIdentifier(Object obj, CascadingAction action, Object anything)

Ho notato che siano presenti i ?, ma perchè? chi può essere il maggior indiziato?

GRazie a tutti in anticipo

Alfredo Aiello

Alex1972 Profilo | Newbie

Secondo me è la lunghezza di qualche campo...esempio avrai dichiarato un campo varchar(10) e stai tentando di scrivere un valore con lunghezza > 10.

lbenaglia Profilo | Guru

>Devo importare un file xml nella mia applicazione, ma nel momento
>che va a scrivere i dati sul db ad un certo punto appare questo
>errore..
>Dati di tipo string o binary che verrebbero troncati.
>L'istruzione è stata interrotta.

Ciao Alfredo,

Come giustamente ha suggerito Alex1972 il problema sta nel fatto che la colonna di destinazione è troppo piccola per contenere il dato che vuoi memorizzare.
Ma fammi capire una cosa: vuoi salvare l'intero documento XML in una colonna oppure vuoi trasformarlo in un rowset relazionale in modo da salvare ogni elemento/attributo nelle corrispondenti colonne della tabella?

>GRazie a tutti in anticipo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stuzzo Profilo | Junior Member

>Come giustamente ha suggerito Alex1972 il problema sta nel fatto
>che la colonna di destinazione è troppo piccola per contenere
>il dato che vuoi memorizzare.
>Ma fammi capire una cosa: vuoi salvare l'intero documento XML
>in una colonna oppure vuoi trasformarlo in un rowset relazionale
>in modo da salvare ogni elemento/attributo nelle corrispondenti
>colonne della tabella?

Ciao Lorenzo,
la seconda che hai detto. Il file xml è formato da tag che rispecchiano le colonne della tabella di destinazione. Anch'io ho subito pensato che ci sia qualcosa troppo lungo, ma non riesco proprio a capire quale tag possa essere. Mica esiste un qualche tool che processa un file xml o che mi controlla la correttezza dei caratteri? Ho pensato che potesse essere di peso anche da questo.

Grazie
Ciao


Alfredo Aiello

lbenaglia Profilo | Guru

>Anch'io ho subito pensato
>che ci sia qualcosa troppo lungo, ma non riesco proprio a capire
>quale tag possa essere. Mica esiste un qualche tool che processa
>un file xml o che mi controlla la correttezza dei caratteri?

Ciao Alfredo,

Fossi in te caricherei l'intero file in una variabile XML che successivamente andrei ad interrogare tramite SELECT utilizzando il metodo Nodes e XQuery, calcolando la lunghezza delle colonne utilizzando la funzione DATALENGTH().
In questo articolo trovi un esempio:
http://www.dotnethell.it/articles/XML-SQL-Server-2005.aspx

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

stuzzo Profilo | Junior Member


>Ciao Alfredo,

Grazie Lorenzo

>Fossi in te caricherei l'intero file in una variabile XML che
>successivamente andrei ad interrogare tramite SELECT utilizzando
>il metodo Nodes e XQuery, calcolando la lunghezza delle colonne
>utilizzando la funzione DATALENGTH().
>In questo articolo trovi un esempio:
>http://www.dotnethell.it/articles/XML-SQL-Server-2005.aspx

Ho letto l'articolo e l'ho trovato molto interessante. Proverò ad implementare la procedura, anche se come ti ripeto io ho il file xml nella forma di rowset e l'interfaccia con il db viene gestita da NHibernate. Appena ho novità ti faccio sapere. Adesso chiudo il topic.

>Ciao!

Ciao


Alfredo Aiello

lbenaglia Profilo | Guru

>Ho letto l'articolo e l'ho trovato molto interessante. Proverò
>ad implementare la procedura, anche se come ti ripeto io ho il
>file xml nella forma di rowset e l'interfaccia con il db viene
>gestita da NHibernate.

La query ti serve per stabilire la lunghezza massima di ogni elemento/attributo del file XML, in modo da dimensionare opportunamente le colonne della tabella.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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