Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Bilddtaen vom Typ: image (SQL-Server) in PictureBox.Image anzeigen

57 views
Skip to first unread message

Joerg Trumpfheller

unread,
Jun 12, 2012, 9:49:52 AM6/12/12
to
Bin langsam am verzweifeln. Habe auch schon viele threads gelesen und Lösungsvorschläge ausprobiert.
Folgendes Problem:
In einer SQL-Server Tabelle werden Bilder in einem Feld vom Data Type image (size 16) verwaltet (ich weiß, ist veraltet, aber damit muss ich erstmal arbeiten).
Dieses möchte ich gern in einer VB.NET-Form-PictureBox anzeigen lassen, hier über einen Button aufgerufen.

Private Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
getImageData("11000000")
End Sub

Private Sub getImageData(ByVal IN_ID As String)
Dim conns as String = "Server=XXX007;DataBase=MyDB;Integrated Security=SSPI"
dim m_CON1 as SqlConnection = New SqlConnection(conns)

Dim ds As New DataSet
Dim sqlString As String = "SELECT Bild FROM tbl_Bild WHERE(Bild_ID = " & IN_ID & ")"

Dim cmd As New SqlCommand
Dim da As SqlDataAdapter

Try
cmd.Connection = m_CON1
cmd.CommandText = sqlString
da = New SqlDataAdapter(cmd)
da.Fill(ds, "MyBild")

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

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

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

End If
Catch ex As Exception
MsgBox(ex.Message)
Finally
m_CON1.Close()
End Try
End Sub

bei PictureBox1.Image = Image.FromStream(stmBLOBData) schmiert das Programm immer ab mit der Fehlermeldung "Ungültiger Parameter": Eine Ausnahme (erste Chance) des Typs "System.ArgumentException" ist in System.Drawing.dll aufgetreten. Das Ergebnis im Dataset sagt, es handelt sich um ein Feld vom Typ System.Byte[].

Was mache ich falsch?

LG Jörg

Peter Fleischer

unread,
Jun 16, 2012, 1:00:20 PM6/16/12
to
Hi Jörg,
ich nutze die Erstellung eines Bitmap-Objektes, was in Deinem Code so
aussehen würde:

' ...
' anstelle:
' Dim stmBLOBData As New MemoryStream(bytBLOBData)
' PictureBox1.Image = Image.FromStream(stmBLOBData)
' die beiden folgenden Anweisungen:
Dim stmBLOBData As New System.IO.MemoryStream(bytBLOBData)
PictureBox1.Image = New Bitmap(stmBLOBData )
' ...

--
Viele Gruesse
Peter

Joerg Trumpfheller

unread,
Jul 4, 2012, 11:07:34 AM7/4/12
to
Sorry, dass ich mich erst jetzt melde. Eine Bronchitis hat mich 2 Wochen niedergestreckt.
Hab Dein Beispiel ausprobiert, funktioniert aber leider auch nicht (gleiche Fehlermeldung).

Ich füge hier mal die ersten Zeilen der image-Daten an. Vielleicht sind dies ja keine Blob-Daten (kenne mich damit nicht so gut aus)

-- Start Bild --
0x151C1A00030000000500010014001900FFFFFFFF42696C640000010500000300000004000000444942001F0D000004F4FFFF28AE0000280000007F0000007400000001001800000000 ... usw.
(Länge > 43.000 Zeichen)
-- Ende Bild --

Wie gesagt mit dem Microsoft SQL Server Management Studio (10.50.2500.0) wird diese Spalte angezeigt als
Data Type: image
System Type: image

Gruß Joerg
0 new messages