| Massimo Fregonese |
Leggere un campo Image scritto con ADO
è qualche tempo che non frequento il forum (un anno e mezzo abbondante...) quindi spero di imbroccare la sezione giusta.
Passando alla problematica: la mia apllicazione ASP NET, tra le altre cosucce, dovrebbe visualizzare dei documenti(word, excel, pdf)/immagini memorizzate in campi di tipo image di sql server (2000 o 2005). Fino a qui non ci sarebbero problemi (ho trovato diversi esempi su come leggere/scrivere un campo blob di sql server tramite ado.net) se non che... questi campi Image sono stati scritti all'interno delle tabelle utilizzando un programma VB6 che faceva uso dei metodi "GetChunk" e "AppendChunk" di ADO. Il risultato è che se provo a leggere i file memorizzati con la vecchia tecnologia utilizzando ADO.NET (almeno con gli esempi che ho trovato fino ad ora, tipo: "http://support.microsoft.com/kb/326502") il file risultante non risulta leggibile. Se prendo delle immagini inserite con ADO.NET e le leggo con ADO.NET va tutto bene; mentre la vecchia applicazione VB6 non riesce più a visualizzarle correttamente. Il problema è stato per caso già visto da qualcuno? Al momento la mia maggior limitazione è che non posso pocedere alla conversione dell'archivio delle immagini in quanto queste devono essere consultabili sia con il vecchio strumento (vb6) che con la nuova applicazione che sto sviluppando... Rinrgazio in anticipo per tutte le risposte che mi perverranno e chiedo venia ai moderatori se per caso ho sbagliato sezione. -- Massimo |
| Gianluca Carucci |
Re: Leggere un campo Image scritto con ADO
Ciao Massimo. Hai provato a fare accesso da .net a quei campi usando ADO invece che ADO.NET?
Vedi questo articolo a tale proposito: http://support.microsoft.com/kb/308611 Gianluca |
| Massimo Fregonese |
Re: Leggere un campo Image scritto con ADO
Ok, grazie ancora dei suggerimenti! :)
|
| Massimo Fregonese |
Re: Leggere un campo Image scritto con ADO
Ciao Gianluca,
intanto ti ringrazio per la risposta; il mio dubbio (non avendo mai utilizzato ADO all'interno di applicazioni .NET) è: se utilizzo ADO la mia applicazione ne risentirà dal punto di vista delle prestazioni? Grazie ancora, Massimo |
| Gianluca Carucci |
Re: Leggere un campo Image scritto con ADO
Ciao Massimo,
non faccio il veggente di professione:D Però lo puoi scoprire usando un profiler. ADO sicuramente è meno performante di di ADO.NET ma potrebbe non essere un collo di bottiglia per il tuo sistema. Fai prima funzionare l'applicazione, poi se hai il sentore di avere problemi di performance, fai tuning e scopri qual'è il punto critico. Magari potrebbe non essere quello che pensi. Gianluca >Ciao Gianluca, >intanto ti ringrazio per la risposta; il mio dubbio (non >avendo mai utilizzato ADO all'interno di applicazioni .NET) >è: se utilizzo ADO la mia applicazione ne risentirà dal punto >di vista delle prestazioni? >Grazie ancora, Massimo |
| Massimo Fregonese |
Re: Leggere un campo Image scritto con ADO
Sono riuscito a risolvere il problema che no nera dovuto all'utilizzo di ADO o ADO.NET.
Ho provato ad includere ADO all'interno della mia applicazione ed ho notato che i problemi che si verificavano erano esattamente gli stessi verificatisi con ADO.NET; con la differenza che i tempi di elaborazione erano saliti in maniera esponenziale (da meno di un secondo a 10 secondi abbondanti per la stessa immagine). Il problema rilevato quindi non era dovuto all'utilizzo di GetChunk piuttosto che il fill di una DataTable ma a qualcos'altro... ovvero ai metodi utilizzati per leggere/scrivere i file immagine. Infatti, dopo qualche ricerca ho trovato che le primitive Put e Get di VB6 si appoggiano librerie a 16 bit o addirittura ad API di win95 che utilizzano codifiche Ansi e non Unicode. Il vecchio applicativo VB6, che faceva uso di stringhe anzichè di array di byte, quindi scriveva e leggeva dati con codifiche diverse da quelle preimpostate nell'ambiente di sviluppo .NET. Se a qualcuno interessa, la soluzione che ho trovato (per leggere questo tipo di dati senza doverli convertire e dover cambiare il vecchio applicativo) è quella di convertire i dati prima di scriverli su file o prima di restituirli al client. Un esempio può essere il seguente: Dim objRiga As DataRow = Nothing Dim objDati() As Byte <....> 'Recupero il valore del blob objDati = objRiga("Immagine") 'Converto i dati. 'NOTA: 1252 è il valore da ultilizzare per la codifica windows occidentale standard utilizzata dal vecchio applicativo VB6. In caso di codifica differente, utilizzare il codice appropriato objDati = System.Text.Encoding.Convert(System.Text.Encoding.Unicode, System.Text.Encoding.GetEncoding(1252), objDati) 'Visualizzo l'immagine Response.ContentType = "image/JPEG" Response.BinaryWrite(objDati) Spero di essere stato utile a chi avesse lo stesso problema :) Ciao, Massimo |