Solved

Insert/Read a Image to MySQL BLOB from a picturebox

Posted on 2008-06-14
6
3,708 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
  • 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
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
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

Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

Question has a verified solution.

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

Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…

770 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