BLOB型データを参照するサンプルコードについて説明します。
取得したBLOB型データはFileStreamオブジェクトを使用してファイルに出力します。出力したデータをピクチャボックスコントロールで表示します。事前にフォームへピクチャボックスコントロール(PictureBox1)を追加してください。
アプリケーションの手順
OdbcConnectionオブジェクトでコネクションを接続します。詳細は、“B.5.1 接続および切断”を参照してください。
OdbcDataAdapterオブジェクトを生成します。(SelectCommandTextプロパティへSELECT文を設定します。)
DataSetオブジェクトを生成します。
OdbcDataAdapter.FillメソッドでデータをDataSetへ取得します。
DataSetTables.Rows.Countプロパティで行数を取得します。
DataRowオブジェクトへ1行分のデータを取り出します。
IsDBNull関数でBLOB型データ列“BLB_C”にデータが存在するかを確認します。
DataRowオブジェクトからBLOB型データ列を指定してバイト配列へデータを取り出します。
コネクションを切断します。
オブジェクトを破棄します。
エラー処理については、“B.5.10 エラー処理”を参照してください。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'オブジェクト宣言
Dim con As System.Data.Odbc.OdbcConnection
Dim adp As System.Data.Odbc.OdbcDataAdapter
Dim dst As DataSet
Dim MyImage As Bitmap
Dim myRow As DataRow
Dim MyData() As Byte
Dim fs As System.IO.FileStream
Dim K As Long
Dim i As Integer
Dim msgstr As String
'OdbcConnectionオブジェクトの生成
con = New System.Data.Odbc.OdbcConnection("DSN=DSN01;UID=USER01;PWD=PASS01")
Try
'1. コネクション接続
con.Open()
'2. OdbcDataAdapterオブジェクトの生成
adp = New System.Data.Odbc.OdbcDataAdapter("SELECT * FROM SAMPLE1.IMGTBL", con)
'3. DataSetオブジェクトの生成
dst = New DataSet()
'4. DataSet オブジェクトへデータを取得
adp.Fill(dst, "IMGTBL")
'5. 取り出したレコード数分繰り返し
For i = 0 To dst.Tables("IMGTBL").Rows.Count - 1
'6.1行分のデータをDataRowオブジェクトへ取り出す
myRow = dst.Tables("IMGTBL").Rows(i)
'7. BLB_C列にデータがあるか
If Not IsDBNull(myRow("BLB_C")) Then
'BLB_C列にデータが存在する場合
'Bitmapオブジェクトがすでに存在する場合オブジェクトを破棄
If Not (MyImage Is Nothing) Then
MyImage.Dispose()
MyImage = Nothing
PictureBox1.Image = Nothing
End If
'8. BLOB型データの取り出し
MyData = myRow("BLB_C")
'FileStreamオブジェクトの生成(ファイルを開く)
fs = New System.IO.FileStream _
("C.BMP", System.IO.FileMode.OpenOrCreate,
System.IO.FileAccess.Write)
'BLOB型データのサイズを取得
K = UBound(MyData)
'BLOB型データをファイルへ書き込む
fs.Write(MyData, 0, K)
'FileStreamオブジェクトを閉じて破棄する
fs.Close()
fs = Nothing
'Bitmapオブジェクトの生成
MyImage = New Bitmap("C.BMP")
'出力したファイルをPictureBoxコントロールで表示する
PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
PictureBox1.Image = CType(MyImage, Image)
PictureBox1.Refresh()
End If
'メッセージボックスの表示
MessageBox.Show(i + 1 & "行目を取得しました",
"Message", MessageBoxButtons.OK, MessageBoxIcon.None)
Next
'9. コネクション切断
con.Close()
'10. オブジェクトの破棄
con.Dispose()
dst.Dispose()
adp.Dispose()
If Not (MyImage Is Nothing) Then
MyImage.Dispose()
MyImage = Nothing
PictureBox1.Image = Nothing
End If
'エラー処理
Catch ex As System.Data.Odbc.OdbcException
'エラー処理ルーチンを記述
msgstr = "▲▼ 接続不可 ▲▼"
MessageBox.Show(msgstr, "!ERROR!", MessageBoxButtons.OK,
MessageBoxIcon.None)
End Try
End Sub
End Class