Jason,
Here is what I used some time ago
Dim loConnection As SqlClient.SqlConnection
Dim loCommand As SqlClient.SqlCommand
Dim loDataReader As SqlClient.SqlDataReader
Dim loBuffer() As Byte
Dim lnRealLength As Long
Dim loStream As System.IO.MemoryStream
'Instantiate new connection object
loConnection = New SqlClient.SqlConnection()
'Prepare connection string and open connection to database
With loConnection
.ConnectionString = "Data Source='ExampleServer';" & _
"Initial Catalog=Examples;Integrated Security=SSPI"
.Open()
'instantiate new command object which
'we will use to read image from table
loCommand = New SqlClient.SqlCommand()
loCommand.CommandText = "SELECT Product_Image " & _
"FROM tblProductImages WHERE Product_ID=1"
loCommand.CommandType = CommandType.Text
loCommand.Connection = loConnection
'Execute prepared command to provide actual
'reading of previously saved binary data
loDataReader = _
loCommand.ExecuteReader( _
CommandBehavior.SequentialAccess)
'instantiate new memory stream to load
'data from binary field
loStream = New System.IO.MemoryStream()
'read actual value from field
Do While loDataReader.Read()
'Get actual length of data in bytes
lnRealLength = loDataReader.GetBytes( _
0, 0, Nothing, 0, Integer.MaxValue)
'Reallocate storage space for an array variable to the
'size of data
ReDim loBuffer(lnRealLength)
'Load data from field into array
lnRealLength = loDataReader.GetBytes( _
0, 0, loBuffer, 0, lnRealLength)
'Load array into prepared stream to allow
'to show it in PictureBox control
loStream.Write(loBuffer, 0, lnRealLength)
'Load image into PictureBox control
PictureBox1.Image = Image.FromStream(loStream)
Loop
'Close all opened resources and objects
loStream.Close()
loStream = Nothing
loDataReader.Close()
.Close()
loCommand.Dispose()
loCommand = Nothing
loConnection.Dispose()
loConnection = Nothing
End With