How To資料: ODP.NETを使用したOracleデータベースへの接続

目的

このHow To資料を完了すると、次のことができるようになります。

前提条件

読者がMicrosoft Visual Studio.NETについての知識を持ち、また、ODP.NETやデータベースの基本を理解していることを前提とします。

概要

ODP.NETは、Oracle.DataAccesss.dllア センブリに含まれていて、データベースとの相互対話を容易に実現するクラスのコレクションを提供します。 いずれの.NETアプリケーションからでもOracleデータおよび機能へ高速かつ確実にアクセスできるように、ODP.NETではOracleのネイ ティブなAPIを使用します。

このHow To資料では、ODP.NETにより実装されるOracleConnectionクラスを使用して、Oracleデータベースへの接続を確立し、データベースと対話する方法を説明します。 ここでは、短いコードを使用して、ODP.NETによりOracleデータベースに接続する方法を示します。

デフォルトでは、接続プーリングはODP.NETで有効有効に設定されています。 ここでは、ODP.NETにより実装される接続プーリング・パラメータをコントロールする方法も紹介します。

要件

  • Oracle Data Provider for .NET(ODP.NET)

  • SQL*Net TCP/IPリスナーを運用しているOracle R8.0.6 以降 (各プラットフォーム)

  • Microsoft Visual Studio .NET(Microsoft .NET Framework 1.0以上など)でインストールされるC#またはVB.NET

説明

ODP.NETがインストールされると、Oracle Universal InstallerによってODP.NETがGlobal Assembly Cache(GAC)に登録されます。 .NETフレームワーク内のGACは、アセンブリを登録するための重要な場所になります。 これらのアセンブリは、登録されると、Visual Studio.NETなどの開発環境など、すべてのアプリケーションで使用できるようになります。

このHow To資料では、OracleConnectionクラスが最も重要なクラスです。 OracleConnectionオブジェクトは、Oracleデータベースへの接続を示します。 このHow To資料では、Oracleデータベースへ接続し、表内に存在するすべての従業員の氏名とその番号をリストする方法を示します。 もう1つの方法として、connectおよびresource権限を持つデータベース・ユーザー・アカウントを使用して、Oracleデータベースへ接続する方法もあります。

ODP.NETを使用してOracleデータベースに接続する前に、ネット・サービス名を追加する必要があります。 ネット・サービス名はTNSとも呼ばれ、Oracleデータベース・インスタンスを識別するために指定します。

ネット・サービス名の追加

ODP.NETでは、ネット・サービス名を 使用して、接続先のデータ・ソース(データベース)を特定します。 ネット・サービス名の設定には、基本となるネットワーク・コンポーネントの構成を行うポスト・インストール・ツールであるOracle Net Configuration Assistant Toolを使用できます。 このツールを使用してネット・サービス名を設定する方法は、OTNで提供されている『Oracle9i Net Services管理者ガイド』を参照してください。


必要なデータベース表の作成

必要なemptab表を作成する手順は、次のとおりです。

  1. SQL*Plusを起動します。
  2. ユーザー名、パスワード、接続文字列を使用して、Oracleデータベースに接続します。 ODP.NET ConnectionStringでも、同じパラメータを使用してください。
  3. SQL>プロンプトで、次のSQLスクリプト(リスト1)を貼り付けます。
    リスト1

    DROP TABLE emptab;
    CREATE TABLE emptab (empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10));
    INSERT INTO emptab VALUES ( 1, 'Mark');
    INSERT INTO emptab VALUES ( 2, 'Roger');
    INSERT INTO emptab VALUES ( 3, 'Crook');
    COMMIT;


コードの説明

必要な名前空間のインクルード: スクリプト内で名前空間の使用方法が限定されないようにするために、.csまたは.vbファイルの「general declaration」セクションに名前空間の参照を追加することをお薦めします。

C#
using System;
using System.Data;
using Oracle.DataAccess.Client;
Visual Basic .NET
Imports System
Imports System.Data
Imports Oracle.DataAccess.Client

1. ユーザーID、パスワード、データ・ソースなどの接続パラメータを設定します。

C#

// Create the connection object
OracleConnection con = new OracleConnection();
// Specify the connect string // NOTE: Modify User Id, Password, Data Source as per your database set up con.ConnectionString = "User Id=scott;Password=tiger;Data Source=orcl9i;";
Visual Basic .NET

' Create the connection object
Dim con As OracleConnection = New OracleConnection()
' Specify the connect string ' NOTE: Modify User Id, Password, Data Source as per your database set up con.ConnectionString = "User Id=Scott;Password=tiger;Data Source=ora9idb;"

2. ODP.NETを介してデータベース接続をオープンします。

C#
try
{
// Open the connection con.Open(); Console.WriteLine("Connection to Oracle database established successfully !"); Console.WriteLine(" "); } catch (Exception ex) { Console.WriteLine(ex.Message); }
Visual Basic .NET
Try
' Open the connection con.Open() Console.WriteLine("Connection to Oracle database established successfully !") Console.WriteLine(" ") Catch ex As Exception Console.WriteLine(ex.Message) End Try

3. データベースへの問合せを実行するためのコマンド・オブジェクトを作成します。

C#
string cmdQuery = "SELECT empno, ename FROM emptab";

// Create the OracleCommand object
OracleCommand cmd = new OracleCommand(cmdQuery);
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
Visual Basic .NET
Dim cmdQuery As String = "SELECT empno, ename FROM emptab"

' Create the OracleCommand object
Dim cmd As OracleCommand = New OracleCommand(cmdQuery)
cmd.Connection = con
cmd.CommandType = CommandType.Text

4. データをOracleDataReaderオブジェクトに取り込み、コンソール上にデータを表示します。 そして、接続オブジェクトをクローズします。

C#
try
{
// Execute command, create OracleDataReader object
OracleDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { // Output Employee Name and Number
Console.WriteLine("Employee Number: " +
reader.GetDecimal(0) +
" , " +
"Employee Name : " +
reader.GetString(1));
  } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { // Dispose OracleCommand object cmd.Dispose(); // Close and Dispose OracleConnection object con.Close();
con.Dispose();
}
Visual Basic .NET
Try


' Execute command, create OracleDataReader object
Dim reader As OracleDataReader = cmd.ExecuteReader() While (reader.Read()) ' Output Employee Name and Number Console.WriteLine("Employee Number : " & _ reader.GetDecimal(0) & _ " , " & _ "Employee Name : " & _ reader.GetString(1)) End While Catch ex As Exception Console.WriteLine(ex.Message) Finally ' Dispose OracleCommand object cmd.Dispose() ' Close and Dispose OracleConnection object con.Close()
con.Dispose()
End Try


How To資料のセットアップおよび実行


1. Visual Studio.NETをオープンします。

2. コンソール・アプリケーション・プロジェクトを作成します。

C#
C#でコンソール・アプリケーション・プロジェクトを作成します。
デフォルトで、Class1.csがプロジェクトに追加されます。
Visual Basic .NET
Visual Basic .NETでコンソール・アプリケーション・プロジェクトを作成します。
 デフォルトで、Module1.vbがプロジェクトに追加されます。

3. プロジェクトに、System, Oracle.DataAccessおよびSystem.Data名前空間への参照が含まれていることを確認します。存在しない場合は、これらの名前空間への参照を追加します。

4. コードをコピーします。

C#

Solution Explorerを使用して、Class1.csをオープンします。 C#によるこのHow To資料書のコードの完全なリストについては、ここをクリックしてください。 このコードをコピーし、Class1.csの内容を上書きします。

Visual Basic .NET

Solution Explorerを使用して、Module1.vbをオープンします。 VB.NETによるこのHow To資料書のコードの完全なリストについては、ここをクリックしてください。 このコードをコピーし、Module.vbの内容を上書きします。

5. コードの説明の手順1にあるご使用のデータベースのセットアップに従って、ユーザーID、パスワード、データ・ソースを変更します。

6. このアプリケーションをコンパイルし実行するために、Ctrl+F5を押します。 図1.1に示されている従業員リストが表示されます。ここには、該当する従業員番号も表示されます。


図1.1 出力のスクリーンショット

要約

前述したとおり、データベースへ接続するための OracleConnectionクラス・インスタンスが作成されます。 このクラスには、ConnectionStringというプロパティがあり、接続文字列がこのプロパティに割り当てられます。 この接続文字列は、ODP.NET仕様に記述されているフォーマットに従います。 User Id は、データベース・ユーザーの名前で、Passwordは、そのユーザーのパスワードで、 Data Source は、ネット・サービス名(TNS のエイリアス)として追加されたOracle接続インスタンスの名前です。 これらのエントリは、セミコロンで区切ります。

接続オブジェクトが作成されると、接続がオープンし使用できるようになります。 このコンストラクタへSQL問合せを渡すことにより、OracleCommand オブジェクトが作成されます。 OracleConnectionの参照は、OracleCommandオブジェクトに渡されます。 これは、SQL問合せであるため、CommandTypeはテキストに設定されます。このコマンドが実行され、OracleDataReaderへの参照が取得されます。 OracleDataReaderの処理には、while loopが使用されます。 コードの最後で、未使用のリソースを廃棄してクローズし、すべてのリソースを開放します。 これは、OracleConnectionの使用方法を示した非常にシンプルな使用例です。 OracleConnectionの動作方法を規定するパラメータは多数あります。 これらのパラメータは、『Oracle Data Provider for .NET 開発者ガイド』の第3章に詳しく説明されています。

接続プーリング

ODP.NET接続プーリングの有効または無効は、Pooling 接続文字列属性を使用して設定します。 デフォルトでは、接続プーリングは有効に設定されています。 ODP.NETで提供される接続プーリング機能の動作をコントロールするConnectionString属性は、次のとおりです。
  • Pooling
    接続プーリングを有効または無効にします。 プールは、属性値一致アルゴリズムによって作成されます。 これは、接続文字列内のスペースの数のみ異なる接続文字列は同一プールを使用することを表しています。 この属性は、TRUEFALSEyesまたはnoのいずれかに設定してください。 この属性のデフォルト値は、TRUEです。

  • Connection Lifetime
    接続の最大存続期間(秒)。 この属性は、接続の最大存続期間を秒数で指定します。
    Connectionが プールに戻される前に、接続の存続期間がチェックされます。 接続の存続期間がこのプロパティ値を超えると、接続がクローズし廃棄されます。 このプロパティ値が0(ゼロ)の場合、接続の存続期間のチェックは行われません。 存続期間を超えた接続のクローズと廃棄は行いません。この処理を行うと、プール内の接続数がMin Pool Size以下になります。 この属性のデフォルト値は、0(ゼロ)です。

  • Connection Timeout
    プール接続が空くまで待機する最大時間(秒数)。この属性は、接続タイムアウトを秒数で指定します。この属性値は、接続プール・リクエストについてのみ有効です。新規接続リクエストでは有効になりません。 この属性のデフォルト値は、15です。

  • Max Pool Size
    この属性は、OracleConnectionで使用する特定のプールで許可される接続の最大数を指定します。 接続文字列内でこの属性を変更しても、既存のプールについての
    Max Pool Size制限は変更されず、 異なる Max Pool Size制限を持つ新しいプールが作成されます。 この属性には、Min Pool Sizeより大きい値を設定する必要があります。 この値は、Poolingがオンにならないかぎり、無視されます。 この属性のデフォルト値は、100です。

  • Min Pool Size
    この属性は、プールの存続期間全体を通して保持する接続の最小数を指定します。 接続文字列内でこの属性を変更しても、既存のプールについての
    Min Pool Size制限は変更されず、 異なるMin Pool Size制限を持つ新しいプールが作成されます。 この値は、Poolingがオンにならないかぎり、無視されます。 この属性のデフォルト値は、1です。

  • Incr Pool Size
    この接続文字列属性は、プール接続がリクエストされたが、使用できる未使用接続が存在しないうえ、
    Max Pool Sizeに達していない場合に確立する新しい接続数を指定します。 この属性のデフォルト値は、5です。

  • Decr Pool Size
    大量の確立済接続が使用されなかった場合にクローズされる接続数です。 この属性のデフォルト値は、1です。

様々なパラメータによる接続動作のコントロール方法の詳細は、『Oracle Data Provider for .NET 開発者ガイド』を参照してください。

リスト2に、これらのパラメータの使用方法を示します。
リスト2

C#
...
OracleConnection con = new OracleConnection();
con.ConnectionString = "User Id=Scott;Password=tiger;Data Source=orcl9i;" +
"Pooling=true; Connection Lifetime=120; Connection Timeout=60;" +
"Max Pool Size=25; Min Pool Size=10; Incr Pool Size=5; Decr Pool Size=2";

con.Open();
...
Visual Basic .NET
...
Dim con as OracleConnection = new OracleConnection()
con.ConnectionString = "User Id=Scott;Password=tiger;Data Source=orcl9i;" & _
"Pooling=true; Connection Lifetime=120; Connection Timeout=60;" & _
"Max Pool Size=25; Min Pool Size=10; Incr Pool Size=5; Decr Pool Size=2"

con.Open()
...


リソース


ODP.NETについては、OTN掲示板の、プログラミングの部屋で取り扱います。

  ※当ページはOracle Technology Network(US)サイトに掲載されたページの翻訳です。原文を見る
Copyright © 2003, Oracle Corporation. All rights reserved. Contact UsLegal Notices and Terms of UsePrivacy Statement
This page is managed and cached by Oracle9i