BLOB型データを参照するサンプルコードについて説明します。
取得したBLOB型データはFileStreamオブジェクトを使用してファイルに出力します。出力したデータをピクチャボックスコントロールで表示します。事前にフォームへピクチャボックスコントロール(PictureBox1)を追加してください。
アプリケーションの手順
OdbcConnectionオブジェクトでコネクションを接続します。詳細は、“C.5.1 接続および切断”を参照してください。
OdbcDataAdapterオブジェクトを生成します。(SelectCommandTextプロパティへSELECT文を設定します。)
DataSetオブジェクトを生成します。
OdbcDataAdapter.FillメソッドでデータをDataSetへ取得します。
DataSetTables.Rows.Countプロパティで行数を取得します。
DataRowオブジェクトへ1行分のデータを取り出します。
IsDBNull関数でBLOB型データ列“BLB_C”にデータが存在するかを確認します。
DataRowオブジェクトからBLOB型データ列を指定してバイト配列へデータを取り出します。
コネクションを切断します。
オブジェクトを破棄します。
エラー処理については、“C.5.10 エラー処理”を参照してください。
'オブジェクト宣言 Dim con As Microsoft.Data.Odbc.OdbcConnection Dim adp As Microsoft.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 'OdbcConnectionオブジェクトの生成 con = New Microsoft.Data.Odbc.OdbcConnection("DSN=DSN01;UID=USER01;PWD=PASS01") Try '1. コネクション接続 con.Open() '2. OdbcDataAdapterオブジェクトの生成 adp = New Microsoft.Data.Odbc.OdbcDataAdapter("SELECT * FROM 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 Microsoft.Data.Odbc.OdbcException 'エラー処理ルーチンを記述 End Try