Recupero immagini Blob da sql server

giovedì 04 novembre 2004 - 19.43

unodidue Profilo | Newbie

Panorama ...
Ho delle immagini in una tabella sql server.
Riesco ad estrarle e a salvarle su hard disk e successivamente riesco a visualizzarle su pagine web
Riesco anche la maggior parte delle volte a cancellare nuovamente le immagini fisicamente dall'hard disk.

Problema ...
qualcuno conosce un modo per non dover salvare le immagini sull'hd?
Conosco il memorystream per le windowsform ma per le webform non c'è un'utilità simile?
Se non c'è sapete suggerirmi un procedimento per cancellare di volta in volta le immagini che ho creato?

Grazie a tutti in anticipo per l'aiuto.

GvnnRules Profilo | Senior Member

No c'è bisogno che le estrai, poi le salvi e poi le cancelli, se vuoi solo visualizzarle c'è un metodo un pò più semplice.

Allora prima di tutto ti servono 2 pagine, una chiamiamola index.aspx, l'altra image.aspx.

Nella prima pagina non devi far altro che mettere un tag image che rimandi alla pagina image.aspx, ad esempio:

<img src="images.aspx?ID=1">

Per ID=1 immaginiamo che sia l'id nel tuo database.

Ora passiamo alla pagina image.aspx, nella parte HTML non mettere nulla, quindi cancella tutto, tranne il riferimento al codebehind (naturalemente se usi visual studio :-P), nel code behind devi:

1. aprire la connessione al database
2. Eseguire la query
3. Leggere i byte dal campo blob
4. fare un response.binaryWrite, indicando che è un'immagine

Ecco un codice di esempio (Spero che in VB.NET ti vada bene :-P )

'apro la connessione
Dim Conn As System.Data.OleDb.OleDbConnection
'imposti la stringa di connessione come preferisci e apri la connessione
Conn.Open()

'creo la query
Dim strSQL As String = "SELECT IMMAGINE FROM TABELLA WHERE ID = " & Request("ID")

'Eseguo la query
Dim oleQuery As New System.Data.OleDb.OleDbDataAdapter(strQuery, Conn)
'ricavo il dataset
Dim QueryDataSet As New System.Data.DataSet
objDataset = oleQuery.Fill(QueryDataSet, "Immagine")
'recupero la mia riga
Dim myRow As DataRow
myRow = QueryDataSet.Tables("Immagine").Rows(0)

'invio i dati al client
MyData = myRow("IMMAGINE")
Response.Buffer = True
Response.ContentType = "image"
Response.BinaryWrite(MyData)

'chiudo la connessione
Conn.Close()

Spero funzioni :-P ... l'ho copiato da una mia pagina già fatta, dovrebbe funzionare.

Ciaoz
Gvnn

PS: Io ho utilizzato l'OLEDB Come connessione, tu puoi usare quella che preferisci :-P

GvnnRules Profilo | Senior Member

Errata corrige:

NoN c'è bisogno che le estrai ....

unodidue Profilo | Newbie

Grazie GvnnRules è un ottimo consiglio ... ora provo ...

Brainkiller Profilo | Guru

Fortunatamente in ASP.NET 2.0 ci sarà una DataGrid ben più potente (nuovo nome GridView) che farà questa operazione per noi senza bisogno di scrivere codice.

ciao
David

unodidue Profilo | Newbie

Allora in attesa di Asp .net 2.0 ho risolto nel modo descritto sotto. Di nuovo grazie ...
ciao a tutti
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