Images in MS SQL DB speichern

Fabia

Grünschnabel
Hallo und guten Tag

Ich möchte auf meiner ASP .NET Webapplikation Images in eine MS SQL DB speichern und diese natürlich wieder anzeigen lassen. Aber irgendwie kriege ich das einfach nicht hin. Die Images lassen sich in die MS SQL DB speichern, aber anzeigen lassen sich diese irgendwie nicht mehr :-(

was mache ich falsch ? hier ist die MSDN Seite die ich gefunden habe zum einfügen der Grafik --> http://www.microsoft.com/germany/ms/msdnbiblio/show_all.asp?siteid=600708
Code:
  Private Sub Button3_Click(ByVal sender As System.Object, _
							ByVal e As System.EventArgs _
							) Handles Button3.Click
	' Liest ein als BLOB in der vorbereiteten Datenbank
	' abgelegtes Bild aus und übergibt die Daten als
	' Byte-Array einen MemoryStream, der als Bildquelle
	' für das PictureBox-Steuerelement genutzt wird.
	' SQL-Verbindung erzeugen
	Dim cn As New SqlConnection(strCn)
	' SQL-Kommando anlegen
	Dim cmd As New SqlCommand("SELECT " & _
							  "BLOBID, BLOBData " & _
							  "FROM BLOBTest " & _
							  "ORDER BY BLOBID", _
							  cn)


	' Daten mit DataAdapter in ein DataSet holen
	Dim da As New SqlDataAdapter(cmd)
	Dim ds As New DataSet
	da.Fill(ds, "BLOBTest")


	' Ergebnisabfrage
	Dim i As Integer = ds.Tables("BLOBTest").Rows.Count
	If i > 0 Then


	  ' Byte-Array mit den Daten befüllen
	  Dim bytBLOBData() As Byte = _
		  CType(ds.Tables("BLOBTest").Rows(i - 1)("BLOBData"), Byte())


	  ' Per MemoryStream in die PictureBox bringen
	  Dim stmBLOBData As New MemoryStream(bytBLOBData)
	  PictureBox1.Image = Image.FromStream(stmBLOBData)

	End If

  End Sub

Leider gibt es für ASP .NET kein Picturebox Steuerelement und mit dem Image Steuerelement funktionierts auch nicht.

Any ideas ?

es grüsst

Fabia
 
Hallo.

Ich würde dir empfehlen, nicht die Bilder in der Datenbank zu speichern, sondern in einem eigenen Verzeichnis auf dem Server-Rechner (also außerhalb der Datenbank). (!)
In der Datenbank selber würde ich dann nur den Pfad speichern, also das Verzeichnis und den Dateinamen.
So dürftest du dann auch keine Probleme haben, die gespeicherten Bilder wieder anzeigen zu lassen.
Ich arbeite zur Zeit auch an einem Projekt, wo Bilder aus einem bestimmten Verzeichnis geladen und in einem Hyperlink angezeigt werden.
(Das Ganze funktioniert aber auch mit einem Image- bzw. Imagebuttonobjekt)
Die Pfade erhält die Webanwendung auch aus einer MS-SQL-Datenbank.
Ich hoffe mal, dir ist damit geholfen.
Sollte noch etwas unklar sein oder nicht funktionieren, frag' ruhig. ;)

Gruß, Niko
 
Zuletzt bearbeitet:
Zitat aus dem MySQL-Server Handbuc
Bei einer normalen Webserver-Konfiguration sollten Bilder als separate Dateien gespeichert
werden. Das heißt, speichern Sie nur einen Verweis zur Datei in der Datenbank. Der Hauptgrund
ist, dass normale Webserver viel besser darin sind, Dateien zu cachen als Datenbankinhalte.
Daher ist es viel einfacher, ein schnelles System zu bekommen, wenn Sie Dateien benutzen.

Ich erinnere mich daran irgenwo einmal gelesen zu haben:
Die beste Datenbank für Bilder(Dateien) ist das Dateisystem
:)
 
@Azmodan und mage: Danke für eure Antworten.

Wie kann ich die Bilder am besten speichern und wieder anzeigen lassen wenn ich den Pfad in der Datenbank zwischen speichere ? Der Benutzer sollte das Bild mit einem CommandDialog ähnlichen Dialog auswählen können und danach beim klicken auf den Speichern Button muss das File auf den Server geladen, wie auch der Pfad des Bildes in die Datenbank gespeichert werden.

Könnt Ihr mir da Tips geben :) ?
 
Hallo.

Nur mal so als Tipp für den Upload: Benutz' dafür einfach ein input-HTML-Element.
Aber natürlich muss type="file" sein:
Code:
<INPUT id="File1" style="WIDTH: 408px; HEIGHT: 22px" type="file" size="48" name="meinedatei" runat="server">
Das erzeugt dir an der Stelle automatisch ein Textfeld, gefolgt von einem Durchsuchen-Button.
(Obiges muss in die .aspx-Datei)

Dann musst du die Dateien im Behind-Code mittels foreach durchlaufen.
Mit einem SQL-Aufruf, der ungefähr so sein könnte, verankerst du das in der Datenbank:
Code:
"INSERT INTO BLOBTest (BLOBID, BLOBpfad) VALUES ('"+blobid+"', '"+blobpfad+"');"
Wobei du blobid und blobpfad natürlich entsprechend belegen musst.

Hoffe mal, das ist dir ein Ansatz. ;)
Wenn du dich näher informieren möchtest, schau mal hier.
Da findest du ein ziemlich ansehnliches Beispiel.

Gruß, Niko
 
Zuletzt bearbeitet:
Wenn ich die Applikation bei mir lokal ausführe kann ich ohne Probleme die Bilder "uploaden" und zwar in ein neu erstelltes Directory "Images" (c:\inetpub\wwwroot\webapplikation\images). Ich musste die entsprechenden Rechte noch im nachhinhein setzen und zwar musste für den Benutzer "ASPNET".

Wenn ich die Applikation auf einem anderen Server installiere (mit Rechte setzen und allem drum und dran), erscheint trotzdem jedesmal die Fehlermeldung "ACCESS Denied". An was kann das legen ?
 
Hallo.

Du brauchst einen Benutzer, der die Zugriffe über's Internet abwickelt (dein "ASPNET"?);
diesem musst du für das Verzeichnis, in welchem die Bilder abgelegt werden sollen, natürlich den Vollzugriff gestatten. Ist das bei dir so eingestellt?
Wenn es so noch nicht funktioniert, musst du eventuell auch die übergeordneten Verzeichnisse, die zum Bilderverzeichnis führen, für diesen Benutzer freigeben.

Gruß, Niko

<edit 13:41>
Hier mal ein Bild...
</edit 13:41>
 
Zuletzt bearbeitet:
@Azmodan: Hallo. Danke erstmal für deine Antwort. Leider funktioniert das mit den Rechten immer noch nicht. Auch mit dem Rechte-Setzen des übergeordneten Verzeichnis. Ich weiss eben auch nicht genau welcher User ich den nehmen sollte, es könnte ja auch der "Internet Guest Account", der "IIS_WPG", der "ASP.Net Web Admin" oder der "ASP.NET Machine Account" sein ? Mit "Everyone" habe ich es auch schon probiert, funktioniert auch nicht :-(
 
Hallo.

Also bei mir hier in der Firma hab' ich mal auf dem entsprechenden Server nachgeschaut und dort ist neben dem "Admin" nur noch ein Account mit Vollzugriff ausgestattet, der "Jeder"-Account, welcher deinem "Everyone" entspricht.
Hast du auf deinem anderen Server denn denselben Benutzer "ASPNET" angelegt und freigegeben?

Gruß, Niko

<edit 09:16>
Hast du dir das hier schon durchgelesen?
</edit 09:16>

<edit 17:09>
Ich hab' hier in diesem OpenBook nochwas für dich gefunden, was dir als Hilfestellung dienen könnte. ;)
</edit 17:09>
 
Zuletzt bearbeitet:
Zurück