Le stockage et la récupération d'images à partir d'une base de données sont une tâche courante en programmation. Bien que cela puisse paraître simple, des problèmes peuvent survenir si le code n'est pas implémenté correctement. Dans ce cas, un utilisateur a rencontré des problèmes lors de l'enregistrement d'images dans une base de données et de leur affichage dans un contrôle Picturebox.
Pour résoudre le problème, examinons le code de l'utilisateur et identifions les problèmes potentiels :
Enregistrement dans la base de données :
ImageStream = New System.IO.MemoryStream PbPicture.Image.Save(ImageStream, System.Drawing.Imaging.ImageFormat.Jpeg) ReDim rawdata(CInt(ImageStream.Length - 1))
Le code ne parvient pas à initialiser les données brutes avec les dimensions correctes. Pour stocker correctement les octets de l'image, ils doivent être redimensionnés pour correspondre à la longueur du flux d'images :
ReDim rawdata(CInt(ImageStream.Length))
Récupération de la base de données :
Dim ad As New System.IO.MemoryStream(100000) Dim im As Image = Image.FromStream(ad) * "error occurs here" (see below)
L'erreur se produit parce que le flux de mémoire publicitaire n’est pas correctement positionné ou a une capacité insuffisante. Le code suivant résout ce problème :
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()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!