OracleのLONG ROW型を取得してピクチャーボックスに画像を表示する方法です。
ここでの説明に利用しているテーブルは以下のような簡単なテーブルです。
create table TEST
(
ID NUMBER(10) not null,
LONGROW LONG RAW
)
また、LONGROWフィールドには、画像ファイルが格納されているのを前提とします。
System.Data.OracleClientの参照設定してください。
まずは、バイナリデータよりImageを生成する簡単なファンクションを実装します。
''' <summary>
''' バイナリデータよりImageを生成する
''' </summary>
''' <param name="data">対象となるデータ</param>
''' <returns>Image</returns>
''' <remarks></remarks>
Private Function ConvBinaryToImage(ByVal data As Byte()) As Image
Dim img As Image = Nothing
Try
Using stream As New IO.MemoryStream(data)
img = Image.FromStream(stream)
End Using
Catch ex As Exception
Throw ex
End Try
Return img
End Function
あとは、上記のConvBinaryToImageファンクションに取得したバイナリデータを渡して、ピクチャーボックスに画像を表示するだけです。
Imports System.Data.OracleClient
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button3.Click
Dim oraBuilder As New OracleConnectionStringBuilder
''ORACLE接続文字列
With oraBuilder
.DataSource = "DataSource"
.UserID = "UserID"
.Password = "Password"
End With
Try
Using oraConn As OracleConnection = New OracleConnection(oraBuilder.ConnectionString)
Using oraCmd As New OracleCommand("SELECT * FROM TEST WHERE ID = 2", oraConn)
oraConn.Open()
Using oraDr As OracleDataReader = oraCmd.ExecuteReader
If oraDr.Read Then
If Not IsDBNull(oraDr(1)) Then
''LONG ROWを取得
Dim row As OracleBinary = oraDr.GetOracleBinary(1)
''画像を表示
Me.PictureBox1.Image = ConvBinaryToImage(row.Value)
End If
End If
End Using
End Using
End Using
Catch ex As OracleException
MessageBox.Show(ex.Message, "ORACLE例外", MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch ex As Exception
MessageBox.Show(ex.Message, "一般例外", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
MessageBox.Show("処理完了")
End Sub