アプリケーションの手順
OdbcConnectionオブジェクトでコネクションを接続します。詳細は、“C.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に対して行った編集内容をコミットします。
コネクションを切断します。
オブジェクトを破棄します。
エラー処理については、“C.5.10 エラー処理”を参照してください。
'オブジェクト宣言 Dim con As Microsoft.Data.Odbc.OdbcConnection Dim adp As Microsoft.Data.Odbc.OdbcDataAdapter Dim dst As DataSet Dim myRow As DataRow Dim fs As System.IO.FileStream Dim MyData() As Byte '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. OdbcDataAdapter.InsertCommandプロパティの設定 adp.InsertCommand = New Microsoft.Data.Odbc.OdbcCommand( _ "INSERT INTO IMGTBL VALUES(?,?)", con) '6. OdbcParameterオブジェクトの生成と設定 adp.InsertCommand.Parameters.Add("KEY_C", Microsoft.Data.Odbc.OdbcType.Int) adp.InsertCommand.Parameters("KEY_C").SourceColumn = "KEY_C" adp.InsertCommand.Parameters.Add("BLB_C",Microsoft.Data.Odbc.OdbcType.VarBinary) adp.InsertCommand.Parameters("BLB_C").SourceColumn = "BLB_C" '7. OdbcDataAdapter.UpdateCommandプロパティの設定 adp.UpdateCommand = New Microsoft.Data.Odbc.OdbcCommand( _ "UPDATE IMGTBL SET KEY_C=?, BLB_C=? WHERE KEY_C=?", con) '8. OdbcParameterオブジェクトの生成と設定 adp.UpdateCommand.Parameters.Add("KEY_C", Microsoft.Data.Odbc.OdbcType.Int) adp.UpdateCommand.Parameters("KEY_C").SourceColumn = "KEY_C" adp.UpdateCommand.Parameters.Add("BLB_C", Microsoft.Data.Odbc.OdbcType.VarBinary) adp.UpdateCommand.Parameters("BLB_C").SourceColumn = "BLB_C" adp.UpdateCommand.Parameters.Add("KEY", Microsoft.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.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 Microsoft.Data.Odbc.OdbcException 'エラー処理ルーチンを記述 End Try