22 messaggi dal 21 giugno 2001
Ciao a tutti
Strano problema.
Usando ASP 3.0 + SQL Serv. 2005 IIS 6 (winXp sp2)
Ho un campo di testo chiamato pagina e impostato a nvarchar(MAX)
se accedo al campo tamite ADO non mi visualizza nulla.
Allora lo riduco a nvarchar(4000) e tramite pagina asp (quindi con un recordset)
riesco a prelevare e visualizzare i dati.
Se lo cambio nuovamente in varchar(8000) funziona ma se lo metto a varchar(MAX) non funziona piu'.
Deduzione:
Non sembra possibile visualizzare un campo con dimensioni superiori a 8000 byte...
ma sembrerebbe un problema non di SQL server ma ado.
Infatti ho fatto questo test
Imposto a varchar(8000) che so che funziona e mostra i dati
creo il recordset e accedo al db
imposto un ciclo per i primi 7 campi

FOR ii=0 TO 6
arrCampi(ii)=rspt(ii)
response.Write(ii & " ) arrCampi(ii)=" & rspt(ii) & "<br />") '###
NEXT

campo_1=rspt(0)
campo_2=rspt(1)
campo_3=rspt(2)
campo_4=rspt(3)
campo_5=rspt(4)
campo_6=rspt(5)

e lui mi stampa
0) arrCampi(ii)=il contenuto
1) arrCampi(ii)=il contenuto
2) arrCampi(ii)=il contenuto
3) arrCampi(ii)=il contenuto
4) arrCampi(ii)=5) arrCampi(ii)= il contenuto
2) arrCampi(ii)=il contenuto

Insomma quando arriva al campo 4 dovrebbe stampare il contenuto e poi un bel <br> per andare accapo ma invece e' come se interrompesse l'elaborazione e non manda in output <br>
Ovviamente il campo 4 contiene dati e se poi cambio il tipo di campo in varchar(8000) il tutto funziona.

Domanda:
Come si mostra in output un campo di testo > di 8000 caratteri ?
2.410 messaggi dal 13 febbraio 2003
Contributi
Domanda:
Come si mostra in output un campo di testo > di 8000 caratteri ?

hai dato un occhiata qui?
http://blogs.aspitalia.com/daniele/post1729/VarCharmax-VarBinarymax-SQL-Server-2005-Valore-SqlDbType.aspx
22 messaggi dal 21 giugno 2001
Ciao

Io uso ASP 3 e non .net e la documentazione sembra fare riferimento a .net e SqlParameter.
L'articolo inoltre che ne parla dice di aggiungere un -1 ma non e' chiaro dove.
Non c'e' un esempio.

Ti faccio un esempio di quello che faccio io:

set rspt=server.CreateObject("adodb.recordset")
rspt.open "SELECT miaTab.campoAlfa, miaTab.campoBeta, miaTab.campoGamma, miaTab.campoDelta FROM miaTab WHERE miaTab.campoAlfa=1,conn

beta=rspt("campoBeta")
gamma=rspt("campoGamma")
delta=rspt("campoDelta")


rspt.close
set rspt=Nothing

response.write("Contenuto: " & beta &"<br>")
response.write("Contenuto: "& gamma&"<br>")
response.write("Contenuto: "& delta &"<br>")


campoGamma dovra' contenere un testo molto lungo ( >di 8000 byte)
ecco cosa succede:

Contenuto: questo e' il contenuto di beta bla bla
Contenuto: Contenuto: questo e' il contenuto di delta bla bla

in pratica non solo non prende il valore del campo gamma ma non manda in output nemmeno il <br> che seguirebbe...
Piu' che rimanandarmi a un articolo sapresti correggermi se commetto qualche errore nel codice, visto che il problema sembrerebbe un baco di ADO o qualcosa di simile ?

grazie Cristian !!
2.410 messaggi dal 13 febbraio 2003
Contributi
Ciao

Io uso ASP 3 e non .net e la documentazione sembra fare riferimento a .net

Buona lettura
http://support.microsoft.com/default.aspx?scid=KB;en-us;q258038
22 messaggi dal 21 giugno 2001
Ciao

... ma nell'articolo si parla di dati informato binario...io li ho in formato testo...

Example 1 : Saving the Data in a SQL Server Image Column to a File on the Hard Disk
Example 2 : Transfer the Image Stored in a .gif File to an Image Column in a SQL Server Table

forse non ho capito cosa intendi, allora.

grazie, sei sempre molto d'aiuto !
un saluto
2.410 messaggi dal 13 febbraio 2003
Contributi
Ciao

... ma nell'articolo si parla di dati informato binario...io li ho in formato testo...

Example 1 : Saving the Data in a SQL Server Image Column to a File on the
Hard Disk
Example 2 : Transfer the Image Stored in a .gif File to an Image Column in
a SQL Server Table
forse non ho capito cosa intendi, allora.

i campi varchar(max) supportano più di 8000 caratteri nello specifico 2^31 per leggerli devi usare ado.stream come se fosse dei campi binari
grazie, sei sempre molto d'aiuto !

di nulla
2.410 messaggi dal 13 febbraio 2003
Contributi
forse non ho capito cosa intendi, allora.
i campi varchar(max) supportano più di 8000 caratteri nello specifico 2^31 per leggerli devi usare ado.stream come se fosse dei campi binari

Altra soluzione per poter utilizzare i nuovi datatype di MS SQL 2005 è quella di usare i client nativi
http://msdn2.microsoft.com/en-us/library/ms131035.aspx
22 messaggi dal 21 giugno 2001
Risolto
Il problema era nella stringa di connessione e nell'uso del Native Client per esere esatti.

Riporto la soluzione a buon pro della comunita'
:-)

Riepilogo del problema
===================

Usando ASP 3.0 e SQLServer Express si possono avere dei problemi con i campi di testo superiori a 8000 caratteri (se usiamo varchar) mentre se si usa nvarchar il limite scende a 4000 caratteri

Sintomi
==============
Il problema sembra presentarsi con campi impostati a varchar(MAX); nVarchar(Max).
Se si accede tramite ADO in una pagina ASP 3.0 non viene restituito alcun errore specifico ma semplicemente i campi appariranno come vuoti.

Soluzione
========
Per accedere ai campi varchar(MAX); nVarchar(Max) e ricavare il contenuto occorre impostare la stringa di connessione con il Native Client come segue:

Provider=SQLNCLI;
e quindi:

conn.open "Provider=SQLNCLI;SERVER=nomeServer\SQLEXPRESS;DATABASE=nomeDatabaseMio;UID=nomeUtente;PWD=laPassword"

mentre invece si presenta il problema se il native Client e' indicato come segue:

conn.open "DRIVER={SQL Native Client};SERVER=nomeServer\SQLEXPRESS;DATABASE=nomeDatabaseMio;UID=nomeUtente;PWD=laPassword"


Ringraziamenti
==============
grazie a Cristiano Peparelli per i suoi suggerimenti !

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.