Hallo,
ich möchte ein Bild aus der Datenbank in einer PictureBox darstellen. Ich relisiere das, indem ich das Bild aus der Datenbank in einer Datei speicher und dieses dann in einer PictureBox öffne.
Jedoch kommt folgende Fehlermeldung, sobald ich ein zweites Bild aus der Datenbank temporär speichern möchte, und somit die bestehende Datei überschreibe
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen _
Prozess verwendet wird. Ich habe gelesen, dass man die Datei folgendermaßen wieder freigeben muss
System.Drawing.Image.FromStream(fs).Dispose() Das funktionier aber auch nicht. Es kommt die Fehlermeldung
System.ArgumentException: Ungültiger Parameter verwendet.
at System.Drawing.ImageFromStream(Stream stream, Boolean _
useEmbeddedColorManagement)
at System.Drawing.Image.FromStream(Stream stream)
at programmname.Funktionen.OpenPictureFromDB(Int32 BildID, String Speicherort) _
in C:\programmname\Funktionen.vb:line 97 Der vollständige Code sieht folgendermaßen aus:
Public Function OpenPictureFromDB(ByVal BildID As Integer, ByVal _
Speicherort As String)
If Speicherort = "OpenPicture" Then Speicherort = _
Application.StartupPath + "\OpenPicture.tmp"
Dim co As New SqlConnection("workstation id=SQLSERVER;packet" & _
"size=4096;user id=sa;data source=SQLSERVER;persist security" & _
"info=True;initial catalog=DATENBANK;password=xxx")
Dim cmd As New SqlCommand
Dim dr As SqlDataReader
Dim fs As New IO.FileStream(Speicherort, IO.FileMode.Create, _
IO.FileAccess.Write)
Dim buff As Byte()
cmd.Connection = co
cmd.CommandText = "SELECT Bild FROM Bilder WHERE ID=" & BildID
co.Open()
Try
dr = cmd.ExecuteReader(CommandBehavior.Default)
Try
If dr.Read Then
buff = dr("Bild")
fs.Write(buff, 0, buff.Length)
System.Drawing.Image.FromStream(fs).Dispose()
fs.Close()
Else
MsgBox("Es ist kein Datensatz vorhanden mit der ID " & _
BildID)
dr.Close()
co.Close()
End If
Catch ex As Exception
MsgBox(ex.ToString)
Finally
dr.Close()
End Try
Catch ex As Exception
MsgBox(ex.ToString)
Finally
co.Close()
End Try
End Function
Public Function mnu_BildAnsehen()
Dim DS As DataSet = SqlSelect("SELECT * FROM Objekte WHERE ID=" + _
Hauptfenster.LinkListe.FocusedItem.Tag) 'Deklaration eines
' Datensatzes; Auswahl des zu öffnenden Datensatzes
If DS.Tables(0).Rows(0).Item("Bild").ToString = "0" Then
MsgBox("Das ausgewählte Produkt enthält kein Bild", _
MsgBoxStyle.Exclamation, "Achtung")
Else
OpenPictureFromDB(CInt(DS.Tables(0).Rows(0).Item("Bild").ToString), _
"OpenPicture")
Dim FensterBildAnsehen As New BildAnsehen
FensterBildAnsehen.Text = Hauptfenster.LinkListe.FocusedItem.Text
FensterBildAnsehen.BackgroundImage = System.Drawing.Image.FromFile( _
Application.StartupPath + "\OpenPicture.tmp")
FensterBildAnsehen.ShowDialog()
End If
End Function Was mache ich falsch???
N I C H T S - I S T - S O - W I E - E S - S C H E I N T |