SQL Server & ASP .NET Blog

Interessantes und Wissenswertes

ASP .NET Bild Upload in SQL Server speichern

Hier noch einmal ein Beitrag, wie es möglich ist Bilder (oder auch andere Dateien) von einer ASP .NET Seite aus im SQL zu speichern.

Eigentlich habe ich das mit diesem (hier) Beitrag schon beschrieben, aber hier nochmal konzentriert nur auf das Thema “Bild hochladen und im SQL Server speichern”. Ob es nun Sinn macht die Datei als solches zu speichern oder nur einen Verweis (als Pfad) soll hier nicht diskutiert werden – die Antwort darauf ist sowieso meist: “Es kommt drauf an…” (außerdem gibt es für solche Zwecke zumindest ab SQL Server 2008 auch den FILESTREAM Datentyp)

Also los. Wie kann ein hochgeladenes Bild im SQL Server gespeichert und wieder abgerufen werden? Ganz einfach! In nur drei einfachen Schritten :-)

1. Webseite

Wir brauchen die entsprechende Webseite. Also erstelle ich eine neue im Visual Studio und fülle die Seite mit einem FileUpload Control und einem Button zum Upload (FileUpload1 und Button1).

file_upload_1

2. Datenbank

In der Datenbank brauchen wir eine Tabelle zum Speichern der Bilder

CREATE TABLE pictures
(
picture VARBINARY(MAX)
,Name VARCHAR(255) 
,AddedAt DATETIME
)

Die Spalte “picture” wird das eigentliche Bild enthalten, daher der Datentyp VARBINARY(MAX).

3. Datei speichern

Nun kommt die eigentliche “Arbeit”: Beim Klick auf “Upload” soll das Bild mit dem Dateinamen und dem Datum in der Datenbank gespeichert werden. Im Event Button1.Click füge ich folgenden Code hinzu:

protected void Button1_Click(object sender, EventArgs e)
{
//die Datei aus dem FileUpload Control 
Byte[] myFile;
myFile = FileUpload1.FileBytes;
//der Dateiname ohne Pfad
string myFileName;            
myFileName = System.IO.Path.GetFileName(FileUpload1.FileName);
//connection to sql server
SqlConnection con = new SqlConnection("Data Source=192.168.1.13;Initial Catalog=TestDB;User ID=sa;Password=blah");
//Insert Statement mit den entsprechenden Parametern
SqlCommand cmd = new SqlCommand("INSERT INTO pictures VALUES (@picture, @name, GETDATE())", con);
//Parameter für das Bild an sich
SqlParameter paramPicture = new SqlParameter("@picture", System.Data.SqlDbType.VarBinary);
paramPicture.Value = myFile;
cmd.Parameters.Add(paramPicture);
//Parameter für den Dateinamen
SqlParameter paramFilename = new SqlParameter("@name", System.Data.SqlDbType.VarChar);
paramFilename.Value = myFileName;
cmd.Parameters.Add(paramFilename);
//Verbindung öffnen und INSERT ausführen (Achtung, kein Exception-Handling)
con.Open();
cmd.ExecuteNonQuery();
con.Close();     
}

Ich denke der Code ist so verständlich, dass ich diesen hier nicht näher erläutern muss. Fragen natürlich immer gern :-)

Ruft man nun die Webseite auf, wählt eine Datei und klickt auf Upload wird diese im SQL Server gespeichert, was dann so aussieht:

picture_2

Nun ist die Datei erst einmal im SQL Server. Wie man diese dann auch wieder da heraus bringt um bspw. das Bild anzuzeigen schreibe ich später nochmal. (das habe ich inzwischen  [hier] getan.)

blog comments powered by Disqus