Heim >Datenbank >MySQL-Tutorial >Wie kann man Bilder effektiv aus einem Datenbank-Blob speichern und abrufen?

Wie kann man Bilder effektiv aus einem Datenbank-Blob speichern und abrufen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 18:28:02905Durchsuche

How to Effectively Store and Retrieve Images from a Database Blob?

Bild im Datenbank-Blob speichern und zur Anzeige abrufen

Problem

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.

Lösung

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)

Arbeitscode zum Speichern von Bildern in der Datenbank

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

Arbeitscode zum Abrufen von Bildern aus der Datenbank

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn