SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Oracle Tips

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

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


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

.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、パスワードを指定し直すだけです。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ODP.NET固有の機能を使用したい場合

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Oracle Tips連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1200 2008/08/22 19:32

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング