TOP > ADO.NET2.0 - ODP.NET非接続型

非接続型のデータ参照

非接続型のデータ取得についてのメモです。

非接続型では、データを取得した後はデータベースに接続している必要はありません。
取得したデータは、DataSetオブジェクトやDataTableオブジェクトに格納されます。DataSetはメモリ内データストアです。 DataSet/DataTable等を詳しく知りたい方は、ADO.NETでググってみましょう。

 

odp.netの参照設定

Oracle DataAccessへの参照を追加してください。

ODP.NET参照設定

 

サンプル

データを読むサンプル -- EMP表の内容を取得し表示する。

サンプル EMP表の内容を取得し表示する。

サンプルプログラム

ソース

Imports Ora = Oracle.DataAccess.Client
Public Class Form1
    Private dtEMP As DataTable = Nothing

    Private Sub getData()
Dim oraDa As Ora.OracleDataAdapter = Nothing
Const cmdSelect As String = _ "select EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO " & _ "from EMP" Try 'OracleDataAdapter インスタンス化 oraDa = New Ora.OracleDataAdapter( _ cmdSelect, _
"data source=orcl;User id=scott;Password=tiger;") 'データテーブル  インスタンス化 dtEMP = New DataTable 'DataTable作成 oraDa.Fill(dtEMP) 'DataGridViewのデータソースにセット DataGridView1.DataSource = dtEMP Catch ex As Ora.OracleException MessageBox.Show("Oracleエラー" & vbCrLf & ex.Message) Catch ex As Exception MessageBox.Show("エラー" & vbCrLf & ex.Message) Finally If Not IsNothing(oraDa) Then oraDa.Dispose() End If End Try End Sub Private Sub Button1_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click getData() End Sub End Class

GetDataプロシジャ 概要

DataAdapterを利用し、DataTableに取得した行をセットします。そのDataTableDataGridViewオブジェクトのDataSourceにセットしています。DataGridViewDataTableの内容に従い自動でグリッドを作成しています。

 

DataAdapterをインスタンス化

ここではSelectコマンドと、ConnectionStringに接続文字列をセットし、インスタンス化します。
Fill を呼び出す前に接続が閉じていた場合は、接続が開かれ、データを取得した後で再び閉じられます。Fill を呼び出す前に接続が開いていた場合は、接続は開いたままです。

データを取得

Fillコマンドにより、Oracle上の選択条件を満たすレコードが戻され、内容はdtEMPDataTableオブジェクト)に格納されます。

 

DataAdapterって面白い!

上記例ではFillコマンドを実行して、DataTableにデータをセットしましたが、その後、もう一度Fillコマンドを実行しても、1回目のデータはDataTableから消えません。つまり、上書きしません。異なるSQLを投げても新しい列名が出てきたら列も追加されます。

これは、面白いですよね??

そんなの必要ない場合は、DataTableNewするなり、Clearするなりします。

 

サンプル EMP表の内容を取得し表示する。

データ取得1回目

次に別名を付けたSQLを投げてみます。
データ取得2回目

EMPNOをEMPNO2,ENAMEをENAME2としてSQLを投げてみました。するとEMPNO,ENAMEはNULLで表示され、EMPNO2,ENAME2は列が追加されています。