AWestEng
asked on
Insert/Read a Image to MySQL BLOB from a picturebox
Hi
I'm trying to fix the code so I can Insert a image from a picture box to a BLOB filed in my MySQL table
and also read the Image from the BLOB filed and put it back to the picturebox.
this is the code I have now, Need some help to fix it.
Dim MySQLHandler As New SQL.MySQLDotNet.ExecuteNon Query
Dim FieldName As String = "Image"
Dim QueryString As String = "UPDATE tbl_employed SET( " & FieldName & " ) = ( @" & FieldName & " ) WHERE EmpNr = '" & m_strEmployedNumber & "'"
MySQLHandler.InsertImageTo BLOB(Query String, FieldName, PictureEditEmploy)
I'm trying to fix the code so I can Insert a image from a picture box to a BLOB filed in my MySQL table
and also read the Image from the BLOB filed and put it back to the picturebox.
this is the code I have now, Need some help to fix it.
Dim MySQLHandler As New SQL.MySQLDotNet.ExecuteNon
Dim FieldName As String = "Image"
Dim QueryString As String = "UPDATE tbl_employed SET( " & FieldName & " ) = ( @" & FieldName & " ) WHERE EmpNr = '" & m_strEmployedNumber & "'"
MySQLHandler.InsertImageTo
Public Function InsertImageToBLOB(ByVal QueryString As String, ByVal FieldName As String, ByVal PictureBox As DevExpress.XtraEditors.PictureEdit) As Integer
Dim ms As MemoryStream = New MemoryStream '// Create a new memory reader
Dim bytBLOBData() As Byte '// Create a byte array to store picture
Dim intBytes As Integer = 0 '// Size of picture
Dim iAffectedRows As Integer = 0 '// Number of affected rows
Try
PictureBox.Image.Save(ms, ImageFormat.Jpeg) '// Get Image from picturebox
intBytes = CInt(ms.Length - 1) '// Calulate byte size of image
ReDim bytBLOBData(intBytes) '// Set size if image byte array
ms.Position = 0 '// Start position for reader
ms.Read(bytBLOBData, 0, CInt(ms.Length)) '// Read the image into the bytBLOBData variable
ms.Close() '// Close reading stream
Catch ex As Exception
Throw
End Try
'// The "Using" block will automatically dispose of the connection when we're finished
Using MyConnectionMySQLOpen As New MySqlClient.MySqlConnection(m_strConnectionString)
Try
Dim prm As New MySql.Data.MySqlClient.MySqlParameter( _
"@" & FieldName, _
MySql.Data.MySqlClient.MySqlDbType.Blob, _
bytBLOBData.Length, _
ParameterDirection.Input, _
False, 0, 0, Nothing, DataRowVersion.Current, bytBLOBData)
'// Open the DB connection
MyConnectionMySQLOpen.Open()
'// Create a new command object
Dim cmd As New MySqlClient.MySqlCommand()
'// Set command properties
With cmd
.Connection = MyConnectionMySQLOpen
.CommandType = CommandType.Text
.CommandText = QueryString
.Parameters.Add(prm)
End With
'// Execute the SQL query with the command object, and get the affected rows in the DB back
iAffectedRows = cmd.ExecuteNonQuery()
'// Close the connection
MyConnectionMySQLOpen.Close()
Catch MyException As MySqlException
Throw
Catch ex As Exception
Throw
Finally
'// Close connection if an exception was thrown before the connection could close
If MyConnectionMySQLOpen.State = ConnectionState.Open Then
MyConnectionMySQLOpen.Close()
End If
End Try
End Using
Return iAffectedRows
End Function
Public Function GetBLOBImage(ByVal TableName As String, ByVal FieldName As String) As Integer
'// Create the SQL query
Dim QueryString As String = "SELECT " & FieldName & " FROM " & TableName
Dim iAffectedRows As Integer = 0 '// Number of affected rows
Dim rawData() As Byte
Dim FileSize As UInt32
Dim fs As FileStream
'// The "Using" block will automatically dispose of the connection when we're finished
Using MyConnectionMySQLOpen As New MySqlClient.MySqlConnection(m_strConnectionString)
Try
'// Open the DB connection
MyConnectionMySQLOpen.Open()
'// Create a new command object
Dim cmd As New MySqlClient.MySqlCommand()
'// Set command properties
With cmd
.Connection = MyConnectionMySQLOpen
.CommandType = CommandType.Text
.CommandText = QueryString
End With
'// Execute the SQL query with the command object, and get the affected rows in the DB back
Dim myData As MySqlDataReader = cmd.ExecuteReader
'// Close the connection
MyConnectionMySQLOpen.Close()
If Not myData.HasRows Then Throw New Exception("There are no BLOBs data")
myData.Read()
FileSize = myData.GetUInt32(myData.GetOrdinal("file_size"))
rawData = New Byte(CInt(FileSize)) {}
myData.GetBytes(myData.GetOrdinal(FieldName), 0, rawData, 0, CInt(FileSize))
fs = New FileStream("C:\newfile.png", FileMode.OpenOrCreate, FileAccess.Write)
fs.Write(rawData, 0, CInt(FileSize))
fs.Close()
Catch MyException As MySqlException
Throw
Catch ex As Exception
Throw
Finally
'// Close connection if an exception was thrown before the connection could close
If MyConnectionMySQLOpen.State = ConnectionState.Open Then
MyConnectionMySQLOpen.Close()
End If
End Try
End Using
Return iAffectedRows
End Function
ASKER
that's in C and not using the .Net connector so what I need help with is to "clean up" the code I have in the snippet above. thx anyway.
Hi!
Do you get any error message, or what is not working ?
Do you get any error message, or what is not working ?
ASKER
The code above is more like "pseudo" code, so no it dosen't work yet. But the code is almost there. It should only need some smal fixing. But that's what I need help with.
ASKER
the
PictureBox As DevExpress.XtraEditors.Pic tureEdit can be changed to
PictureBox As PictureBox
PictureBox As DevExpress.XtraEditors.Pic
PictureBox As PictureBox
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
Is this what you locking for
http://dev.mysql.com/doc/refman/5.0/en/blob.html