アプリケーションの手順
OdbcConnectionオブジェクトでコネクションを接続します。詳細は、“B.5.1 接続および切断”を参照してください。
OdbcDataAdapterオブジェクトを生成します。(SelectCommandプロパティへSELECT文を設定します)
DataSetオブジェクトを生成します。
OdbcDataAdapter.FillメソッドでデータをDataSetへ取得します。
OdbcDataAdapter.InsertCommandプロパティへINSERT文を設定します。
InsertCommandプロパティへ設定したパラメタマーカ('?')に対応するOdbcParameterオブジェクトの生成と設定をします。
OdbcDataAdapter.InsertCommand.Parameters.AddメソッドでOdbcParameterオブジェクトを生成します。SQL文中のパラメタマーカ('?')の出現順に生成してください。
OdbcParameter.ParameterNameプロパティには、オブジェクト名を任意で設定します。
OdbcParameter.OdbcTypeプロパティを設定します。
OdbcParameter.SourceColumnプロパティへパラメタの値(Valueプロパティ)に使用するDataSetの列名を設定します。
OdbcDataAdapter.UpdateCommandプロパティへUPDATE文を設定します。
UpdateCommandプロパティへ設定したパラメタに対応するOdbcParameterオブジェクトの生成と設定をします。
OdbcDataAdapter.UpdateCommand.Parameters.AddメソッドでOdbcParameterオブジェクトを生成します。SQL文中のパラメタマーカ('?')の出現順に生成してください。
OdbcParameter.ParameterNameプロパティには、オブジェクト名を任意で設定します。
OdbcParameter.OdbcTypeプロパティを設定します。
OdbcParameter.SourceColumnプロパティへパラメタの値(Valueプロパティ)に使用するDataSetの列名を設定します。
探索条件(WHERE句)に設定するOdbcParameter.SourceVersionプロパティにDataRowVersion.Originalを設定します。
FileStreamオブジェクトを使用してBLOB型データをファイルよりバイト配列へ取得します。
データの編集をします。
OdbcDataAdapter.Tables.Rows.Countメソッドを使用してDataSetに取り出した行数を取得します。
行がある場合は1行目を更新対象行としてDataRowオブジェクトへ取り出します。
行がない場合はDataAdapter.Tables.NewRowメソッドで新しい行を作成しDataRowオブジェクトへ取り出します。
DataRow.BeginEditメソッドで編集モードにしてデータの編集をします。
DataRow.EndEditメソッドで編集を終了します。
NewRowメソッドにより作成したDataRowオブジェクトをOdbcDataAdapter.Tables.Rows.Addメソッドで追加します。
OdbcDataAdapter.UpdateメソッドでDataSetの編集操作の内容により設定したINSERT文かUPDATE文を実行します。
DataSet.AcceptChangesメソッドでDataSetに対して行った編集内容をコミットします。
コネクションを切断します。
オブジェクトを破棄します。
エラー処理については、“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 myRow As DataRow
Dim fs As System.IO.FileStream
Dim MyData() As Byte
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. OdbcDataAdapter.InsertCommandプロパティの設定
adp.InsertCommand = New System.Data.Odbc.OdbcCommand(
"INSERT INTO IMGTBL VALUES(?,?)", con)
'6. OdbcParameterオブジェクトの生成と設定
adp.InsertCommand.Parameters.Add("KEY_C", System.Data.Odbc.OdbcType.Int)
adp.InsertCommand.Parameters("KEY_C").SourceColumn = "KEY_C"
adp.InsertCommand.Parameters.Add("BLB_C", System.Data.Odbc.OdbcType.VarBinary)
adp.InsertCommand.Parameters("BLB_C").SourceColumn = "BLB_C"
'7. OdbcDataAdapter.UpdateCommandプロパティの設定
adp.UpdateCommand = New System.Data.Odbc.OdbcCommand(
"UPDATE IMGTBL SET KEY_C=?, BLB_C=? WHERE KEY_C=?", con)
'8. OdbcParameterオブジェクトの生成と設定
adp.UpdateCommand.Parameters.Add("KEY_C", System.Data.Odbc.OdbcType.Int)
adp.UpdateCommand.Parameters("KEY_C").SourceColumn = "KEY_C"
adp.UpdateCommand.Parameters.Add("BLB_C", System.Data.Odbc.OdbcType.VarBinary)
adp.UpdateCommand.Parameters("BLB_C").SourceColumn = "BLB_C"
adp.UpdateCommand.Parameters.Add("KEY", System.Data.Odbc.OdbcType.Int)
adp.UpdateCommand.Parameters("KEY").SourceColumn = "KEY_C"
adp.UpdateCommand.Parameters("KEY").SourceVersion = DataRowVersion.Original
'9. BLOB型データをファイルより取得する
fs = New System.IO.FileStream _
("C:\yamasaki\test.bmp", System.IO.FileMode.OpenOrCreate,
System.IO.FileAccess.Read)
ReDim MyData(fs.Length)
fs.Read(MyData, 0, fs.Length)
fs.Close()
fs = Nothing
'10.データの更新(DataSetに1行もデータがない場合は行を追加する)
If Not dst.Tables("IMGTBL").Rows.Count = 0 Then
myRow = dst.Tables("IMGTBL").Rows(0)
Else
myRow = dst.Tables("IMGTBL").NewRow
End If
myRow.BeginEdit()
myRow("KEY_C") = 1
myRow("BLB_C") = MyData
myRow.EndEdit()
If dst.Tables("IMGTBL").Rows.Count = 0 Then
dst.Tables("IMGTBL").Rows.Add(myRow)
End If
'11. INSERT文/UPDATE文の実行
adp.Update(dst, "IMGTBL")
'12. DataSet オブジェクトに対して行われたすべての編集をコミットする
dst.AcceptChanges()
MessageBox.Show("データベースにBLOB型データが保存されました",
"Normal End", MessageBoxButtons.OK, MessageBoxIcon.None)
'13. コネクション切断
con.Close()
'14. オブジェクトの破棄
con.Dispose()
dst.Dispose()
adp.Dispose()
'エラー処理
Catch ex As System.Data.Odbc.OdbcException
'エラー処理ルーチンを記述
msgstr = "▲▼ COMMUNICATION OFF LINE ▲▼"
MessageBox.Show(msgstr, "!ERROR!", MessageBoxButtons.OK,
MessageBoxIcon.None)
End Try
End Sub
End Class