Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

.NETアプリケーションからOracleに接続する

Oracle Data Provider for .NET(ODP.NET)の利用

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/05/01 08:00

.NETアプリケーションからOracleへ接続する場合、Oracle Data Provider for .NET(ODP.NET)を利用すると、「Oracle接続に最適化されている」「Oracle独自の機能が使用可能」といった面で便利です。今回は、このODP.NETを使用するために必要な準備とOracleに接続するための簡単なコードを紹介します。

目次

はじめに

 .NETアプリケーションからOracleへ接続するための最善の方法は、Oracle社が提供している「Oracle Data Provider for .NET」(以下、ODP.NET)です。なぜ、ODP.NETが最善の方法かというと、以下の2つの理由からです。

  1. Oracle接続に最適化されているため、パフォーマンスが良い
  2. Oracle独自の機能が使用可能

 今回は、このODP.NETを使用するために必要な準備とOracleに接続するための簡単なコードを紹介します。

対象読者

  • Visual Basic、もしくはC#を使ってプログラムを作ったことのある人。
  • Oracleデータベース対応アプリケーション開発に興味のある人。

必要な環境

 Microsoft .NET Framework 1.0 以上が必要です。また、ODP.NETから接続可能なOracleデータベースとして、Oracle8i R8.1.7.4以上が必要になります。

ODP.NETのインストール

 ODP.NETのインストーラは、Oracle Technology Network(以下、OTN)からダウンロードできます。

OTN:ODP.NETダウンロードサイト
OTN:ODP.NETダウンロードサイト

 上記サイトから、[Oracle Data Provider for .NET 2.0 10.2.0.2.20]をクリックし、[Oracle Developer Tools for Visual Studio .NET with ODAC 10.2.0.2.20]をクリックします(ここからはOTNへのログインが必要になり、ログインしていない場合は、ログインを行う画面が表示されます)。

 ライセンス契約書が表示されるので、すべての内容を確認して必要なチェックボックスをオンにし[同意する]ボタンをクリックすると、ファイルのダウンロードページが表示されます。[ODTwithODAC10202.exe]をクリックすると、ファイルのダウンロードが開始します。インストール方法の詳細は、同ページの[インストール手順]を参照してください。

編集部注
 上記の手順は、2007/4/9現在のものです。バージョンアップによって、リンク先やファイル名などの表記が若干変更される可能性があります。
 

Oracleへの接続確認

 ODP.NETのインストールが完了したら、ODP.NETからOracleにアクセスしてみましょう。ODP.NETはADO.NET 2.0に対応しており、ADO.NET 2.0の特徴的な機能であるDbProviderFactoryクラスに対応しています。ODP.NETをインストールすると、ADO.NET 2.0 database factory classと、machine.configのDbProviderFactoriesに登録されます。

machine.config 一部抜粋
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <configSections>
    <section name="oracle.dataaccess.client"
     type="System.Data.Common.DbProviderConfigurationHandler,
      System.Data, Version=2.0.0.0, Culture=neutral,
      PublicKeyToken=b77a5c561934e089" />
    </sectionGroup>
  </configSections>
  <system.data>
    <DbProviderFactories>
      <add name="Oracle Data Provider for .NET"
       invariant="Oracle.DataAccess.Client"
       description="Oracle Data Provider for .NET"
       type="Oracle.DataAccess.Client.OracleClientFactory,
        Oracle.DataAccess, Version=2.102.2.20,
        Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </system.data>
</configuration>

 従来のADO.NETでは、使用するデータ・プロバイダによってSystem.Data.SqlClient名前空間(SQL Server用)、Oracle.DataAccess. Client名前空間(Oracle用)、System.Data.OleDb名前空間(OLE DBプロバイダ用)などを、それぞれ使い分ける必要がありました。しかし、これではコードが個別のデータ・プロバイダに依存してしまいます。そこでADO.NET 2.0では、データ・プロバイダに依存しない汎用クラスが追加されています。

 具体的には、System.Data.Common名前空間に追加されたDbConnectionDbCommandDbDataReaderDbParameterなどのクラスです。これらの汎用クラスは、DbProviderFactoryクラスのCreatexxxxxメソッドを介して取得することができます。DbFactoryクラスを参照するためには、名前空間をインポートします。

名前空間のインポート
Imports System.Data.Common
名前空間のインポート
using System.Data.Common;

 以下、DbFactoryクラスを利用したコードになります。

Factoryクラスを利用したOracleへの接続
Private Sub DbConnect()

  'ProviderFactoryの設定
  Dim factory As DbProviderFactory = _
    DbProviderFactories.GetFactory("Oracle.DataAccess.Client")
  Dim csbuilder As DbConnectionStringBuilder = _
    factory.CreateConnectionStringBuilder
  csbuilder("Data Source") = "ORCL10GR2"
  csbuilder("User ID") = "Scott"
  csbuilder("Password") = "Tiger"

  'データベース接続
  Dim conn As DbConnection = factory.CreateConnection()
  conn.ConnectionString = csbuilder.ConnectionString
  conn.Open()

  'データアクセス処理
  Dim cmd As DbCommand = factory.CreateCommand()
  cmd.Connection = conn
  cmd.CommandType = CommandType.Text
  cmd.CommandText = "SELECT * FROM emp"
  Dim reader As DbDataReader = cmd.ExecuteReader()
  Do While reader.Read()
    '処理の実行
  Loop

  'Close
  conn.Close()
  conn.Dispose()

End Sub
Factoryクラスを利用したOracleへの接続
private void DbConnect(){

  // ProviderFactoryの設定
  DbProviderFactory factory
    = DbProviderFactories.GetFactory("Oracle.DataAccess.Client");
  DbConnectionStringBuilder csbuilder
    = factory.CreateConnectionStringBuilder();
  csbuilder("Data Source") = "ORCL10GR2";
  csbuilder("User ID") = "Scott";
  csbuilder("Password") = "Tiger";

  // データベース接続
  DbConnection conn = factory.CreateConnection();
  conn.ConnectionString = csbuilder.ConnectionString;
  conn.Open();

  // データアクセス処理
  DbCommand cmd =  factory.CreateCommand();
  cmd.Connection = conn;
  cmd.CommandType = CommandType.Text;
  cmd.CommandText = "SELECT * FROM emp";
  DbDataReader reader = cmd.ExecuteReader();
  while(reader.Read()){
    // 処理の実行
  }

  // Close
  conn.Close();
  conn.Dispose();
}

 上記のようなコードを記述すると、接続先のデータベースに依存しない汎用的なコードでアプリケーションを開発できます。データベースが切り替わった場合は、DbProviderFactoriesクラスのGetFactoryメソッドで、新たな接続先に対応したデータ・プロバイダを指定し、接続先情報、ユーザーID、パスワードを指定し直すだけです。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 日本オラクル 大田(オオタ ヒロシ)

    日本オラクル株式会社 Oracle Directテクニカルサービス部所属。開発者の視点から、Oracle Databaseの機能を最大限に活かすための手法を日々研究しながら、プリセールス活動やオンラインセミナー等による情報発信を行う。現在はWindows Server上でのOracle製品活用を推進...

バックナンバー

連載:Oracle Tips

もっと読む

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5