Solved

Insert/Read a Image to MySQL BLOB from a picturebox

Posted on 2008-06-14
6
3,757 Views
Last Modified: 2013-11-26
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.ExecuteNonQuery

        Dim FieldName As String = "Image"
        Dim QueryString As String = "UPDATE tbl_employed SET( " & FieldName & " ) = ( @" & FieldName & " ) WHERE EmpNr = '" & m_strEmployedNumber & "'"
        MySQLHandler.InsertImageToBLOB(QueryString, FieldName, PictureEditEmploy)
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

Open in new window

0
Comment
Question by:AWestEng
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
6 Comments
 
LVL 2

Expert Comment

by:team2005
ID: 21788015
Hi!

Is this what you locking for
http://dev.mysql.com/doc/refman/5.0/en/blob.html

0
 
LVL 1

Author Comment

by:AWestEng
ID: 21789036
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.
0
 
LVL 2

Expert Comment

by:team2005
ID: 21791363
Hi!

Do you get any error message, or what is not working ?

0
Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

 
LVL 1

Author Comment

by:AWestEng
ID: 21791460
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.
0
 
LVL 1

Author Comment

by:AWestEng
ID: 21791464
the
PictureBox As DevExpress.XtraEditors.PictureEdit can be changed to
PictureBox As PictureBox
0
 
LVL 1

Accepted Solution

by:
AWestEng earned 0 total points
ID: 21826056
the question seems dead. the solution is just to change the "@" to a "?"

I created a new question here, this one is for the Update
http://www.experts-exchange.com/Database/MySQL/Q_23499277.html
0

Featured Post

SharePoint Admin?

Enable Your Employees To Focus On The Core With Intuitive Onscreen Guidance That is With You At The Moment of Need.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
When table data gets too large to manage or queries take too long to execute the solution is often to buy bigger hardware or assign more CPUs and memory resources to the machine to solve the problem. However, the best, cheapest and most effective so…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question