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

C.5.4 BLOB型データの参照

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

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

アプリケーションの手順

  1. OdbcConnectionオブジェクトでコネクションを接続します。詳細は、“C.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. オブジェクトを破棄します。

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