連載
» 2006年01月07日 00時00分 公開

.NETでOracleアプリを作ろう(3):Oracleアプリだってコーディング量を減らしたい (2/4)

[小海友和,日本オラクル]

DataSetの作成

 Oracleエクスプローラから表をドラッグ&ドロップするだけでは、DataSetは作成されません。ただ、DataSetの作成もODTの機能を使用することで、簡単に行うことができます。

 DataSetには型付DataSetと型なしDataSetが存在します。型付DataSetはあらかじめスキーマ定義を行う必要があるため、手動での作成はやや面倒です。ただし、パフォーマンスや、開発効率という点からDataSetはできる限り型付DataSetとして作成することが望ましいとされています。ODTを使用すると、この型付DataSetを簡単に作成できます。

手順1

 すでに作成されているOracleDataAdapterコンポーネントを右クリックし、「DataSetを生成...」をクリックします(図7)。

図7 DataSetの生成 図7 DataSetの生成
メモ:自動コード生成の際に、パスワードを保存していない場合、パスワード入力ダイアログが表示されます。

 これによって、型付DataSetが作成されます(図8)。

図8 生成されたDataSet 図8 生成されたDataSet

手順2

 ここで作成されるDataSetは、型付DataSetなので、スキーマ定義も自動的に作成されます。スキーマ定義を確認するには、作成されたDataSetを右クリックして、「スキーマの表示...」をクリックします(図9)。

図9 スキーマ定義の表示 図9 スキーマ定義の表示

 スキーマ定義がグラフィカルに表示されます(図10)。EMP_VPD表は、DataSet内でEmpVpdという名前のDataTableとして定義されています。

図10 データセットのスキーマ定義 図10 データセットのスキーマ定義

 スキーマ定義はXMLスキーマ定義言語(XSD)で定義されています。スキーマ定義ファイルをXML形式で表示することも可能です(図11)。

図11 DataSetのスキーマ定義(XML形式) 図11 DataSetのスキーマ定義(XML形式)

まずはデータを表示してみよう

 今回のサンプル・アプリケーションは最終的に社員名によるデータ検索、データの更新までを行えるものになりますが、まずは、DataGridにデータを表示するところから始めてみましょう。検索ボタンをダブルクリックして、以下のようにコーディングします。

Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button1.Click

    ' 接続をオープン
    empVpdOracleConnection1.Open()                      (1)

    ' ClientIdパラメータの設定
    empVpdOracleConnection1.ClientId = "D10"            (2)

    ' DataSet内のデータの消去
    EmpVpd11.Clear()                                    (3)

    ' OracleDataAdapterオブジェクトのFillメソッドで
    ' DataSetへデータを格納
    empVpdOracleDataAdapter1.Fill(EmpVpd11.EmpVpd)      (4)

    ' DataGridにDataSetをバインド
    DataGrid1.SetDataBinding(EmpVpd11, "EmpVpd")        (5)

    ' 接続をクローズ
    empVpdOracleConnection1.Close()                     (6)
End Sub
リスト1 DataGridへデータを表示するためのコード(VB)

(1)まず、接続をオープンします。実は非接続型データアクセスを行う場合、Openは省略することが可能です。OracleDataAdapterのFillメソッドを実行時に接続がオープンされていない場合、暗黙的にオープンし、Fill終了時にクローズするためです。しかし、ClientIdをセットするためには、接続がオープンしている必要があるため、今回は明示的に接続をオープンします。

(2)今回はVPDの機能を使用して、「Deptno=10」の情報だけを表示するために、OracleConnectionのClientIdプロパティに「D10」をセットします。

(3)DataSetをクリアしておきます。

(4)OracleDataAdapterのFillメソッドを用い、DataSetにデータを格納します。DataSetは型付DataSetとして定義されていますので、このように直接DataTableを指定することも可能です。

(5)DataGridにDataSetをバインドします。

(6)接続を明示的にクローズします。

 ここで手動で行うコーディングはたったの6行です。ODTを使用しない場合、ODP.NETのプロパティでの設定や多くの手動でのコーディングが発生しますので、ODTの自動コード生成機能による作業の効率化を実感することができます。

メモ:ClientIdの設定などは行わず、ただデータを表示するだけならば、Fillメソッドの実行を行うコードを1行記述するだけで実現可能です。

 コーディングが終わったら、アプリケーションをビルドして開始してみましょう(図12)。

図12 データの表示 図12 データの表示

 今回、ClientIdパラメータに「D10」を設定しているため、EMP_VPD表のDEPTNO列の値が10のものだけが表示されていることが確認できます。もちろん、このサンプルアプリケーションからデータベースへ投げられるクエリに、WHERE句はありません。ClientIdの値を変更することによって、アプリケーションとしてはまったく同じクエリを投げているにもかかわらず、ClientIdの値によって適切な結果をOracleデータベースが返していることが分かると思います。(次ページへ続く)

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。