|
はじめに .NETアプリケーションからOracleへ接続するための最善の方法は、Oracle社が提供している「Oracle DataProvider for .NET」(以下、ODP.NET)です。なぜ、ODP.NETが最善の方法かというと、以下の2つの理由からです。
- Oracle接続に最適化されているため、パフォーマンスが良い
- 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ダウンロードサイト
上記サイトから、[Oracle Data Provider for .NET 2.010.2.0.2.20]をクリックし、[Oracle Developer Tools for Visual Studio .NET withODAC10.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名前空間(SQLServer用)、Oracle.DataAccess.Client名前空間(Oracle用)、System.Data.OleDb名前空間(OLEDBプロバイダ用)などを、それぞれ使い分ける必要がありました。しかし、これではコードが個別のデータ・プロバイダに依存してしまいます。そこでADO.NET 2.0では、データ・プロバイダに依存しない汎用クラスが追加されています。
具体的には、System.Data.Common名前空間に追加されたDbConnection、DbCommand、DbDataReader、DbParameterなどのクラスです。これらの汎用クラスは、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、パスワードを指定し直すだけです。 |
|