DevTrain Startseite Visual Studio 1 Magazin  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Hannes Preishuber Artikel Drucken
        
Bild in Datenbank hochladen und anzeigen

Man kann Bilder in der Datenbank speichern. Es gibt Gründe die dafür sprechen und welche dagegen. Dies soll dieser Artikel nicht erörtern.

Zunächst erzeugen Sie eine Tabelle im SQL Server mit einem Feld vom Typ Image. Das Problem ist, das SQLDatasource diesen Type nicht verarbeiten kann. Also muss ein Umweg über das ObjectDatasource Control gewählt werden. Um ohne Code auszukommen erzeuge ich  eine Typed Dataset (XSD) im app_code Folder. Dieses kapselt nur den Zugriff auf die Tabelle.

Das Gridview Control entält im EditItemtemplate eine Spalte mit dem Fileupload Control. Um das Bild zu speichern hänge ich mich in die Methode Itemupdating des Formview (oder Gridview) Controls.  Dort wird der Uplaod Stream einfach dem Update Parameter zugewiesen.

Protected Sub FormView1_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewUpdateEventArgs)

Dim myup As FileUpload = CType(FormView1.Row().FindControl("fileupload1"), FileUpload)

Try

Dim ImageStream As IO.Stream = myup.PostedFile.InputStream

Dim lang As Integer = myup.PostedFile.ContentLength

Dim ImageContent(lang) As Byte

ImageStream.Read(ImageContent, 0, lang)

e.NewValues.Item("Bild") = ImageSream

Catch

End Try

End Sub

Um zu verhinder das ein leeres Fileupload Control beim Update des Datensatzes das Bild überschreibt wurde das XSD per Editor verändert und eine SQLAbfrage eingefügt die das verhindert.

[Bild] =COALESCE(@Bild,bild)

Um das Bild anzeigen verwendet man üblichwerweise einen ASHX handler. Der folgende Code ist in der ASHX Datei und nutzt das Typed Dataset um an die Daten zu kommen.

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

context.Response.ContentType = "image/jpeg"

context.Response.Cache.SetCacheability(HttpCacheability.Public)

context.Response.BufferOutput = False

Dim stream As IO.Stream = Nothing

Try

If Not (context.Request.QueryString("ID")) Is Nothing Then

Dim myDA As New aDSMitarbeiterTableAdapters.MitarbeiterTableAdapter

Dim dt As aDSMitarbeiter.MitarbeiterDataTable = myDA.GetDataBy(context.Request.QueryString("ID"))

Dim bild As Byte() = dt.Rows(0).Item("bild")

HttpContext.Current.Response.BinaryWrite(bild)

End If

Catch

End Try

End Sub

Die Anzeige im Gridview  erfolgt dann in etwa mit <img src=bild.ashx?id=bild1>.

 

 


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 21.11.2006
  Gültig bis: 19.02.2007
0 Ratings
Bewertung: 0,0%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG