ページの先頭行へ戻る
Symfoware Server V12.4.0 アプリケーション開発ガイド(ODBCドライバ編)
FUJITSU Software

B.5.4 BLOB型データの参照

BLOB型データを参照するサンプルコードについて説明します。

取得したBLOB型データはFileStreamオブジェクトを使用してファイルに出力します。出力したデータをピクチャボックスコントロールで表示します。事前にフォームへピクチャボックスコントロール(PictureBox1)を追加してください。

アプリケーションの手順

  1. OdbcConnectionオブジェクトでコネクションを接続します。詳細は、“B.5.1 接続および切断”を参照してください。

  2. OdbcDataAdapterオブジェクトを生成します。(SelectCommandTextプロパティへSELECT文を設定します。)

  3. DataSetオブジェクトを生成します。

  4. OdbcDataAdapter.FillメソッドでデータをDataSetへ取得します。

  5. DataSetTables.Rows.Countプロパティで行数を取得します。

  6. DataRowオブジェクトへ1行分のデータを取り出します。

  7. IsDBNull関数でBLOB型データ列“BLB_C”にデータが存在するかを確認します。

  8. DataRowオブジェクトからBLOB型データ列を指定してバイト配列へデータを取り出します。

  9. コネクションを切断します。

  10. オブジェクトを破棄します。

エラー処理については、“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