Das Speichern und Abrufen von Bildern aus einer Datenbank ist eine häufige Aufgabe in der Programmierung. Obwohl es einfach erscheinen mag, können Probleme auftreten, wenn der Code nicht korrekt implementiert wird. In diesem Fall stieß ein Benutzer auf Probleme beim Speichern von Bildern in einer Datenbank und beim Anzeigen in einem Picturebox-Steuerelement.
Um das Problem zu beheben, untersuchen wir den Code des Benutzers und identifizieren potenzielle Probleme:
Speichern in der Datenbank:
ImageStream = New System.IO.MemoryStream PbPicture.Image.Save(ImageStream, System.Drawing.Imaging.ImageFormat.Jpeg) ReDim rawdata(CInt(ImageStream.Length - 1))
Der Code kann nicht initialisiert werden Rohdaten mit den richtigen Abmessungen. Um die Bildbytes korrekt zu speichern, sollte sie neu dimensioniert werden, um sie an die Länge des Bildstreams anzupassen:
ReDim rawdata(CInt(ImageStream.Length))
Abrufen aus der Datenbank:
Dim ad As New System.IO.MemoryStream(100000) Dim im As Image = Image.FromStream(ad) * "error occurs here" (see below)
Der Fehler entsteht, weil der Ad-Memory-Stream nicht richtig positioniert ist oder nicht genügend Kapazität hat. Der folgende Code behebt dieses Problem:
ad.Position = 0 Dim im As Image = Image.FromStream(ad)
Dim filename As String = txtName.Text + ".jpg" Dim FileSize As UInt32 conn.Close() Dim mstream As New System.IO.MemoryStream() PbPicture.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg) Dim arrImage() As Byte = mstream.GetBuffer() FileSize = mstream.Length Dim sqlcmd As New MySqlCommand Dim sql As String mstream.Close() sql = "insert into [your table] (picture, filename, filesize) VALUES(@File, @FileName, @FileSize)" Try conn.Open() With sqlcmd .CommandText = sql .Connection = conn .Parameters.AddWithValue("@FileName", filename) .Parameters.AddWithValue("@FileSize", FileSize) .Parameters.AddWithValue("@File", arrImage) .ExecuteNonQuery() End With Catch ex As Exception MsgBox(ex.Message) Finally conn.Close() End Try
Dim adapter As New MySqlDataAdapter adapter.SelectCommand = Cmd data = New DataTable adapter = New MySqlDataAdapter("select picture from [yourtable]", conn) commandbuild = New MySqlCommandBuilder(adapter) adapter.Fill(data) Dim lb() As Byte = data.Rows(0).Item("picture") Dim lstr As New System.IO.MemoryStream(lb) PbPicture.Image = Image.FromStream(lstr) PbPicture.SizeMode = PictureBoxSizeMode.StretchImage lstr.Close()
Das obige ist der detaillierte Inhalt vonWie kann man Bilder effektiv aus einem Datenbank-Blob speichern und abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!