I am using this to get image bytes from the database
cmd.CommandText = \"select imagedate from projectimages where imagename = \'\" + _
ListBox1.Text + \
Use a MemoryStream object as per Microsoft.
I was getting the parameter not valid error as well. To fix, I added a picturebox to my form that loads the image I'm copying to the SQL server as a background image. This statement seems to be key:
PictureBox1.BackgroundImage.Save(ms, PictureBox1.BackgroundImage.RawFormat)
It makes the actual upload take a lot longer, but I'm no longer getting the parameter error... I think because the pictures are actually valid images now.
SSScmd.CommandText = "INSERT INTO PreviewSlideshow (Name, Photo) VALUES (@name, @photo)"
Dim p As New SqlParameter("@photo", SqlDbType.Image)
For Each CurFile As IO.FileInfo In New IO.DirectoryInfo(sSourcePath).GetFiles
If CurFile.Name = "Thumbs.db" Then
'skip
Else
If CurFile.Extension = "jpg" Or CurFile.Extension = "png" Then
'show the image name on the form
ImageName.Text = CurFile.Name
SSScmd.Parameters.AddWithValue("@name", ImageName.Text)
Dim ms As New MemoryStream()
PictureBox1.BackgroundImage = Image.FromFile(sSourcePath & CurFile.Name)
PictureBox1.BackgroundImageLayout = ImageLayout.Stretch
PictureBox1.BackgroundImage.Save(ms, PictureBox1.BackgroundImage.RawFormat)
Dim data As Byte() = ms.GetBuffer()
p.Value = data
SSScmd.Parameters.Add(p)
SSScmd.ExecuteNonQuery()
SSScmd.Parameters.Clear()
End If
End If
Next
here's my code to show blob file to picturebox in vb.net. hope it helps
Dim connstring As String = "Database=pmk;data source=localhost;user id=root;password="
Dim Sql As String = "select * from mastermahasiswa where Nim='" & TextBox1.Text & "'"
Dim conn As New MySqlConnection(connstring)
Dim cmd As New MySqlCommand(Sql, conn)
Dim dr As MySqlDataReader = Nothing
conn.Open()
dr = cmd.ExecuteReader()
dr.Read()
Dim imagebytes As Byte() = CType(dr("Foto"), Byte())
Using ms As New IO.MemoryStream(imagebytes)
PictureBox1.Image = Image.FromStream(ms)
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
End Using
conn.Close()
After 5-6 hours of searching forums and blogs and everything i fond this... to save image to database
1- datatype should be image in database
Now add this code when storing image to the sql database
OpenFileDialog1.ShowDialog()
imageFilename = OpenFileDialog1.FileName
Dim imageUpload As Image
imageUpload = Image.FromFile(OpenFileDialog1.FileName)
If imageFilename <> "" Then
Dim imageNameTemp As String
imageNameTemp = imageFilename
While (imageNameTemp.Contains("\"))
imageNameTemp = imageNameTemp.Remove(0, imageNameTemp.IndexOf("\") + 1)
End While
Dim ms As New IO.MemoryStream
If imageFilename.Contains("jpeg") Or imageFilename.Contains("jpg") Then
imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
End If
If imageFilename.Contains("png") Then
imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
End If
If imageFilename.Contains("gif") Then
imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Gif)
End If
If imageFilename.Contains("bmp") Then
imageUpload.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
End If
'Dim cmd As New SqlCommand("INSERT INTO projectimages (imagename,imagedate,csvprojectref) VALUES ('" + imageFilename + "',@BLOBData,CHECKSUM('" + textboxFileRef.Text + "'))", con)
Dim b() As Byte = ms.ToArray()
Dim cmd As New SqlCommand("INSERT INTO projectimages (imagename,imagedate,csvprojectref) VALUES ('" + imageNameTemp + "',@BLOBData,CHECKSUM('" + textboxFileRef.Text + "'))", con)
cmd.Parameters.Add("@BLOBData", SqlDbType.Image, b.Length).Value = b
' Dim cmd As New SqlCommand("insert projectimages(imagename,imagedate,csvprojectref) values('imagma','" + img + "',CHECKSUM('" + textboxFileRef.Text + "'))", con)
cmd.ExecuteNonQuery()
' cmdTemp.Parameters.Add("@photo", SqlDbType.Image, b.Length).Value = b
End If
And when to retrieve data to insert into picture box use this code...
cmd.CommandText = "select imagedate from projectimages where imagename = '" + ListBox1.Text + "' and CSVprojectref=checksum('" + textboxFileRef.Text + "')"
cmd.Connection = con
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds, "projectimages")
Dim c As Integer = ds.Tables(0).Rows.Count
If c > 0 Then
Dim bytBLOBData() As Byte = _
ds.Tables(0).Rows(c - 1)("imagedate")
Dim stmBLOBData As New MemoryStream(bytBLOBData)
PictureBox1.Image = Image.FromStream(stmBLOBData)
End If
Dim img As Byte() = DirectCast(cmd.ExecuteScalar(), Byte())
Dim ms as MemoryStream = New MemoryStream(img)
pictureBox.Image = Image.FromStream(ms)
assuming imagedate field a blob field.