93 messaggi dal 11 agosto 2008
Sarà che mi si sono incriccati i neuroni o, peggiore delle ipotesi, che me ne sia rimasto uno solo e in tal caso è un po' stanco, ma non riesco a trovare una strada per un'operazione che immagino sia semplicissima.
Ho una tabella in SQL Server di immagini relative a degli alberghi formata dai seguenti campi:

Id int;
AlbergoId int;
Foto image;

1° problema: Inserire le immagini nel database.

Uso il controllo FileUpload e salvo il contenuto in un oggetto Stream. Poi immagino di dover caricare il contenuto in un array Byte.
Ecco il codice in C#:

Byte foto[];
System.IO.Stream fotoStream;

fotoStream = FileUploadFoto.FileContent;
foto = fotoStream.ToArray();

E adesso come lo associo al campo Foto del database? Immagino di dover fare questo nell'evento ItemInserting...

2° problema: Visualizzare le immagini del database.
Penso di utilizzare il controllo ListView, ma ho visto che quando lo associo alla tabella attraverso SqlDataSource, in tutti i templates il campo Foto viene associato a una label o a un TextBox.

Che devo fare per visualizazre l'immagine?

Scusate per il livello, ma dovete capire la stanchezza del mono-neurone. Anzi se conoscete qualche neurina, forse potrei farli incontrare per vedere se si moltiplicano.

Buona giornata a tutti.

Andrea

Ciao neurone
Puoi usare direttamente FileUploadFoto.FileBytes per avere l'array di byte. Per salvarlo, dipende da cosa usi. Hai un tuo biz, scegli la foto da inserire insieme ad un DetailsView per l'inserimento dell'intero record? Se usi un DataSource devi intercettare l'evento Inserting. Nell'argomento a secondo del tipo di DataSource hai il Command (con il SqlDataSource) oppure InputParameters (con l'ObjectDataSource).
Nel primo caso aggiungi un nuovo parametro al command, valorizzandolo con i bytes. Nel secondo caso, aggiungi una nuova chiave con il nome del campo e come valore i bytes.

Per mostrare l'immagine devi ricorrere ad un ImageField o ad un template che prepari un uri ad un tuo handler che restituisce l'immagine. Questo perché mica puoi inserire i byte direttamente nella pagina html, perché è sempre questo che si genera. Crei un link con qualcosa tipo images.ashx?id={0} dove l'handler in base all'id esegue una query per ottenere i bytes e scriverli in output.
Prendi per esempio spunto da qua
http://www.aspitalia.com/script/525/Ridimensionare-Immagini-ASP.NET.aspx

Ciao

Il mio blog
Homepage
93 messaggi dal 11 agosto 2008
Ciao Ricciolo,
forse oggi ho qualche neurone in più, ma si vede che sono ancora pochi per capire tutto il tuo messaggio.
Vorrei usare una GridView o una ListView, ma posso anche usare un DetailsView, comunque connessi attraverso un SqlDataSource.
Come faccio ad aggiungere un nuovo parametro al command, valorizzandolo in bytes?

Grazie mille, anzi cento. Scusa, ma non ho abbastanza neuroni per mille grazie.
Andrea
Ma in realtà te l'ho già spiegato, comunque sull'evento Inserting del SqlDataSource hai e.Command che è l'oggetto SqlCommand, quindi ci puoi mettere dentro tutti i parametri che vuoi, come normalmente si fa con ADO.NET.

Ciao

Il mio blog
Homepage

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.