Erore inserimento lunghi testi

martedì 15 agosto 2006 - 18.38

acsp Profilo | Newbie

salve a tutti...
sto usando sql server, visual studio 2005 e vb.
tramite una stored procedure, devo inserire nel database un testo di max 2000 caratteri.
mi è stato detto che definire, in una tabella, un campo di tipo text mi avrebbe dato dei problemi e visto che il varchar ammette fino a 8000 caratteri ho definito il campo di mio interesse nel seguente modo

descrizione as varchar(2000)

l'inserimento dei dati è a posto ma il testo inserito in DESCRIZIONE mi viene tagliato.

ad esempio, ho il seguente testo (nr caratteri = 1378):

*******************************************************************
Si vuol realizzare un database per una stazione televisiva in modo da gestire il palinsesto relativo alla programmazione giornaliera.
Un palinsesto per un dato giorno è composto di fasce temporali corrispondenti ad un programma. Ogni fascia temporale è identificata dal giorno e dall’ora di inizio e si vuole rappresentare anche l’ora di fine. I programmi sono suddivisi in programmi di informazione, fiction (film, telefilm, sceneggiati...) e spettacoli. Per ogni programma interessa conoscere il nome, che lo identifica, e la durata. Inoltre, si vuole registrare il nome del giornalista responsabile dei programmi di informazione, le eventuali restrizioni alla visione (visione sconsigliata ai bambini, per tutti…) delle fiction e la tipologia di spettacolo (varietà, quiz…).
Si intende tenere traccia anche della pubblicità. Ogni evento pubblicitario è identificato dall'azienda e dal nome del prodotto e si richiede di specificare anche la durata. Esistono due tipi di eventi pubblicitari: gli spot e le televendite. Gli spot sono caratterizzati anche da una fascia oraria e dal numero delle volte che lo spot andrà in onda. Gli spot sono trasmessi raggruppati in interruzioni pubblicitarie associate alle fasce temporali del palinsesto. Infine, le televendite vanno in onda solo nel corso degli spettacoli e vengono trasmesse in tutte le puntate, ogni volta alla stessa ora.
*******************************************************************

ma quando vado a leggere la tabella ottengo solo questo:

*******************************************************************
Si vuol realizzare un database per una stazione televisiva in modo da gestire il palinsesto relativo alla programmazione giornaliera. Un palinsesto per un dato giorno è composto di fasce temporali co
*******************************************************************



devo usare x forza il campo di tipo text?
grazie a tutti

lbenaglia Profilo | Guru

>descrizione as varchar(2000)
>
>l'inserimento dei dati è a posto ma il testo inserito in DESCRIZIONE
>mi viene tagliato.

Se descrizione è definito come varchar(2000) stai certo che il numero massimo di caratteri ammessi per quella colonna è di 2000 caratteri.

Probabilmente il tuo è un semplice limite di visualizzazione.
Non parli della versione di SQL Server che stai utilizzando. Ad esempio il Query Analyzer presente in SQL Server 7.0 e 2000 di default visualizza al max 256 caratteri per colonna.
Puoi configurare questo valore selezionando il menu Tools, Options, Tab Results, ed inserendo il valore desiderato nella text box "Maximum characters per column".

>grazie a tutti
Prego.

Ciao!

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

acsp Profilo | Newbie

>Se descrizione è definito come varchar(2000) stai certo che il
>numero massimo di caratteri ammessi per quella colonna è di 2000
>caratteri.

>Probabilmente il tuo è un semplice limite di visualizzazione.
>Non parli della versione di SQL Server che stai utilizzando.
>Ad esempio il Query Analyzer presente in SQL Server 7.0 e 2000
>di default visualizza al max 256 caratteri per colonna.
>Puoi configurare questo valore selezionando il menu Tools, Options,
>Tab Results, ed inserendo il valore desiderato nella text box
>"Maximum characters per column".

il problema non è la visualizzazione nella tabella, è che quando leggo il campo da vb con visual studio mi visualizza solamente la parte tagliata. cmq ora ho fatto la modifica che mi consigliavi, domani lo provo e ti faccio sapere...
grazie mille

lbenaglia Profilo | Guru

>il problema non è la visualizzazione nella tabella, è che quando
>leggo il campo da vb con visual studio mi visualizza solamente
>la parte tagliata.
Come fai ad interrogare la tabella da Visual Basic?
Mi posti il codice?

>cmq ora ho fatto la modifica che mi consigliavi,
>domani lo provo e ti faccio sapere...
La modifica che ti ho consigliato di fare serve solo a modificare il numero massimo di caratteri per colonna restituiti da Query Analyzer, quindi non ha alcun effetto con Visual Basic e la tua applicazione.
Molto probabilmente sbagli ad interrogare la tabella...

>grazie mille
Prego.

Ciao!

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

acsp Profilo | Newbie

ciao! innanzitutto grazie x la risposta.
la tabella contenente il campo descrizione è stata creata nel modo seguente

[CODE] create table Progetto ( codP smallint identity primary key, titolo varchar (60) not null, descrizione varchar(2000) not null, commenti varchar(500), stato varchar (10) not null default 'wait', dataApprovazione smalldatetime, dataConsegna smalldatetime, voto tinyint check (voto between 0 and 30), nomefile varchar (100) ) [/CODE]

mentre la stored procedure che inserisce i dati del progetto è la seguente

[CODE] CREATE PROCEDURE proc_ins_progetto @tit varchar(50), --titolo @desc varchar(2000), --descrizione @gruppo smallint --cod del gruppo AS --Inserimento di un nuovo progetto BEGIN ... --inserimento del progetto BEGIN TRANSACTION insert into Progetto(titolo, descrizione) values(@tit, @desc) ... if @@error=0 begin commit return 0 end else begin rollback return 2 end ... [/CODE]

l'inserimento è corretto e non da errori. ma, se apro la tabella dall'enterprise manager o se faccio una semplicissima query del tipo

[CODE] select * from progetto where codp = ... [/CODE]

o se leggo i dati da vb.net ottengo:

************************************************************
codp 8

titolo Gestione stazione televisiva

descrizione Si vuol realizzare un database per una stazione televisiva in modo da gestire il palinsesto relativo alla programmazione giornaliera. Un palinsesto per un dato giorno è composto di fasce temporali co

commenti null

stato wait
...
************************************************************

pur avendo inserito il seguente testo

************************************************************
Si vuol realizzare un database per una stazione televisiva in modo da gestire il palinsesto relativo alla programmazione giornaliera.
Un palinsesto per un dato giorno è composto di fasce temporali corrispondenti ad un programma. Ogni fascia temporale è identificata dal giorno e dall’ora di inizio e si vuole rappresentare anche l’ora di fine. I programmi sono suddivisi in programmi di informazione, fiction (film, telefilm, sceneggiati...) e spettacoli. Per ogni programma interessa conoscere il nome, che lo identifica, e la durata. Inoltre, si vuole registrare il nome del giornalista responsabile dei programmi di informazione, le eventuali restrizioni alla visione (visione sconsigliata ai bambini, per tutti…) delle fiction e la tipologia di spettacolo (varietà, quiz…).
Si intende tenere traccia anche della pubblicità. Ogni evento pubblicitario è identificato dall'azienda e dal nome del prodotto e si richiede di specificare anche la durata. Esistono due tipi di eventi pubblicitari: gli spot e le televendite. Gli spot sono caratterizzati anche da una fascia oraria e dal numero delle volte che lo spot andrà in onda. Gli spot sono trasmessi raggruppati in interruzioni pubblicitarie associate alle fasce temporali del palinsesto. Infine, le televendite vanno in onda solo nel corso degli spettacoli e vengono trasmesse in tutte le puntate, ogni volta alla stessa ora.
************************************************************


perchè?
grazie mille

lbenaglia Profilo | Guru

>perchè?

Hai dei CRLF nel testo?
In EM l'unica visualizzazione è tabellare e quindi il testo dopo eventuali CRLF non si vede se non ampliando la dimensione della riga.
Ascolta, esegui la select da Query Analyzer in modalità testuale avendo cura di impostare il numero massimo di caratteri per singola colonna a 8000 e vedrai che funzionerà!!

>grazie mille
Prego.

Ciao!

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

acsp Profilo | Newbie

>Hai dei CRLF nel testo?

si, e non posso impedire l'utente di inserirli.

>In EM l'unica visualizzazione è tabellare e quindi il testo dopo
>eventuali CRLF non si vede se non ampliando la dimensione della
>riga.

non sono i crlf a crearmi problemi perchè l'enterprise manager non spezza il testo sul crlf ma in mezzo ad una parola!!!

>Ascolta, esegui la select da Query Analyzer in modalità testuale
>avendo cura di impostare il numero massimo di caratteri per singola
>colonna a 8000 e vedrai che funzionerà!!

ho già impostato il nr max di caratteri a 8000 ma continua a spezzarmi il testo come sopra. se cambio il tipo della colonna da varchar a text?
è vero che il campo text mi creerà dei problemi?

grazie ancora e ciao

lbenaglia Profilo | Guru

>>Hai dei CRLF nel testo?
>
>si, e non posso impedire l'utente di inserirli.
Non ti ho detto di toglierli

>>Ascolta, esegui la select da Query Analyzer in modalità testuale
>>avendo cura di impostare il numero massimo di caratteri per singola
>>colonna a 8000 e vedrai che funzionerà!!
>
>ho già impostato il nr max di caratteri a 8000 ma continua a
>spezzarmi il testo come sopra. se cambio il tipo della colonna
>da varchar a text?

Va bene, a questo punto ti preparo un esempio che dimostra che quello che affermi non è possibile.
La query è ovviamente eseguita da Query Analyzer.
In allegato trovi l'esempio di codice con il risultato.

>grazie ancora e ciao
Prego.

Ciao!

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

acsp Profilo | Newbie

grazie di tutto... mi sento un'idiota... avevo impostato, nel query analizer, come nr massimo di caratteri per colonna, 800 invece di 8000...



mi dispiace di averti fatto perder tempo... grazie cmq infinitamente!!!

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