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

B.4.7 BLOB型データの更新

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

本サンプルコードは、FileStreamオブジェクトを使用してファイルより取得したBLOB型データを、AppendChunkメソッドで16384バイトずつRecordsetオブジェクトへ追加します。UPDATE文実行後、影響を受けた行数をメッセージボックスで表示します。

アプリケーションの手順

  1. コネクションを接続します。詳細は、“B.4.1 接続および切断”を参照してください。

  2. Commandオブジェクトを生成します。
    Command.ActiveConnectionプロパティに手順1で生成したConnectionオブジェクトを設定します。
    Command.CommandTextプロパティにUPDATE文を設定します。
    Command.CommandTypeプロパティにCommandTypeEnum.adCmdTextを設定します。

  3. Parameterオブジェクトの生成と設定をします。
    Parameter.Nameプロパティには、オブジェクト名を任意で設定します。
    Parameter.Typeプロパティには、DataTypeEnum.adLongVarBinaryを設定します。
    Parameter.Directionプロパティには、パラメタが入力パラメタ(adParamInput)であることを設定します。
    Parameter.Sizeプロパティには、データの最大サイズをバイト数で設定します。

  4. Parameter.AppendChunkメソッドでBLOB型データを追加します。

  5. ParametersコレクションにParameterオブジェクトを追加します。

  6. Command.ExecuteメソッドでUPDATE文を実行します。
    引数RecordsAffectedを指定しExecuteメソッドで影響を受けた行数を取得します。

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

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

エラー処理については、“B.4.10 エラー処理”を参照してください。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'オブジェクト宣言
        Dim Con As ADODB.Connection
        Dim Com As ADODB.Command
        Dim Par1 As ADODB.Parameter

        Dim Chunks As Short
        Dim fs As System.IO.FileStream
        Dim Fl As Integer
        Dim Fragment As Short
        Dim Chunk() As Byte
        Const ChunkSize As Short = 16384
        Dim k As Integer
        Dim ra As Long

        'Connectionオブジェクトの生成と設定
        Con = New ADODB.Connection()
        Con.ConnectionString = "DSN=DSN01;UID=USER01;PWD=PASS01;"

        On Error GoTo ErrorProc

        '1.コネクション接続
        Con.Open()

        '2, Commandオブジェクトの生成と設定
        Com = New ADODB.Command()
        Com.ActiveConnection = Con
        Com.CommandText = "UPDATE IMGTBL SET CLB_C=? WHERE KEY_C=1"
        Com.CommandType = ADODB.CommandTypeEnum.adCmdText

        '3. Parameterオブジェクトの生成と設定
        Par1 = Com.CreateParameter("CLB_C", ADODB.DataTypeEnum.adLongVarChar, ADODB.ParameterDirectionEnum.adParamInput)

        'ファイルを開く
        fs = New System.IO.FileStream _
 ("C:\yamasaki\CLOB.TXT", System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Read)

        'CLOB型データのサイズを取得
        Fl = fs.Length
        Par1.Size = Fl

        '規定量にデータを分けて追加するため、分割数と残量を求める
        Chunks = Fl \ ChunkSize
        Fragment = Fl Mod ChunkSize

        ReDim Chunk(Fragment - 1)
        'CLOB型データをファイルから取得する
        fs.Read(Chunk, 0, Fragment)

        '4. ParameterオブジェクトへCLOB型データを追加する
        Par1.AppendChunk(Chunk)

        ReDim Chunk(ChunkSize - 1)
        '分割数分繰り返し
        For k = 1 To Chunks
            'CLOB型データをファイルから取得する
            fs.Read(Chunk, 0, ChunkSize)
            '規定量分のデータ追加
            Par1.AppendChunk(Chunk)
        Next k

        '5. ParametersコレクションにParameterオブジェクトを追加
        Com.Parameters.Append(Par1)

        '6. UPDATE文を実行します
        Com.Execute(ra)

        'メッセージボックスの表示
        MessageBox.Show(ra & "行更新されました", "Normal End",
         MessageBoxButtons.OK, MessageBoxIcon.None)

        'ファイルを閉じる
        fs.Close()
        fs = Nothing

        '7. コネクション切断
        Con.Close()

        '8. オブジェクトの破棄
        Par1 = Nothing
        Com = Nothing
        Con = Nothing

        Exit Sub

        'エラー処理
ErrorProc:

        'エラー処理ルーチンを記述
        MessageBox.Show("▲▼  COMMUNICATION OFF LINE  ▲▼", "No Connect", 
         MessageBoxButtons.OK, MessageBoxIcon.None)

    End Sub
End Class