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