Oracle Data Provider for .NET(C# Version)について
このチュートリアルでは、Oracle Database内のデータにアクセスするためにOracle Data Provider for .NETを使用する.NETアプリケーションを作成する方法について説明します。
約30分
このチュートリアルでは、以下のトピックについて説明します。
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告:すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注:各手順に関連したスクリーンショットのみをロードして表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
.NETアプリケーションでは、Oracleの基本的なクライアント接続ソフトウェアに加えて、管理データ・プロバイダ(ここで、"管理"とは、.NETフレームワークで管理されるコードを指します)を使用する必要があります。 データ・プロバイダは、.NETアプリケーション・コードとOracleクライアント接続ソフトウェアの間のレイヤーです。 Oracle Data Provider for .NET(ODP.NET)は、Oracleの高性能なADO.NET 2.0に準拠したデータ・プロバイダであり、Oracle Real Application Clusters、Oracle XML DB、およびOracle Advanced Securityをはじめとした、Oracle固有の機能およびチューニング・オプションの一式を公開します。 これは、Oracle Technology NetworkのWebサイトから無料でダウンロードできます。 ODP.NETおよびそのほかに必要なOracleクライアント接続ソフトウェアがインストールされると、Visual Studioを使用したアプリケーションの開発を始めることができます。 開発を始める前に、クライアントの接続性を確認することを推奨します。 VS.NETと同じマシンでSQL*Plusを使用してOracleに接続できる場合は、Oracleのクライアント側ソフトウェアは正しくインストールされ、設定されていることになります。
Oracleを初めて使用する場合は、
『Oracle Data Provider for .NET開発者ガイド』の"Connecting to the Oracle Database"でODP.NETに関する具体的なバックグラウンド情報を参照するか、
『Oracle Database 管理者ガイド』でOracleデータベースの一般的な管理に関する情報を参照してください。 『How to: Connect to an Oracle Database Using ODP.NET』ドキュメントのサンプル・コードを参考にすることもできます。
トピック・リストに戻る
このチュートリアルを始める前に以下を確認してください。
 |
Oracle Database 11gまたはOracle Database 10gをインストールし、データベースを作成してあること。 |
 |
Visual Studio .NET 2003以上をインストールしてあること。 |
 |
Oracle Database ClientまたはOTNから、ODP.NET 11gをインストールしてあること。 |
トピック・リストに戻る
Visual Studioに新しいプロジェクトを作成するには、以下の手順を実行します。
| 1. |
Windowsのプログラム・メニューから、Visual Studioを起動します。 Microsoft Visual Studio GUI環境が表示されます。 Recent Projectsパネルで、Create:の横にある「Project」をクリックします。
New Projectウィンドウが表示されます。
|
| 2. |
Project typesリストから、「Visual C#: Windows」を選択します。 「Windows Application」テンプレートを選択します。 Nameフィールドに、OraWinAppと入力します。Locationフィールドで、ファイルを保存するディレクトリを指定します。 (注:ディレクトリが存在しない場合は、自動で作成されます。) 「OK」をクリックします。
|
| 3. |
これで、プロジェクトが作成されました。 Viewメニューから、「Solution Explorer」を選択してSolution Explorerを開きます(まだ開いていない場合)。
|
トピック・リストに戻る
プロジェクトはOracleデータベースにアクセスする必要があるため、データ・プロバイダを含んでいるdllへの参照を追加する必要があります。 以下の手順を実行します。
| 1. |
Projectメニューから、「Add Reference...」を選択します。
Add Referenceダイアログ・ボックスが表示されます。
|
| 2. |
コンポーネント名のリストを下方向にスクロールして、「Oracle.DataAccess」を選択します。 「OK」をクリックします。
注:Oracle.DataAccessコンポーネントが複数表示されている場合は、バージョン'2.102.2.20'を選択します。
|
トピック・リストに戻る
データベースからデータを取得するために、フォームにいくつかのコントロールを追加できます。 以下の手順を実行します。
| 1. |
Viewメニューから「Toolbox」を選択します。 ツールボックスが表示されます。 「Common Controls」を開きます。
|
| 2. |
「Button」コントロールをForm1キャンバスにドラッグします。
キャンバスにコントロールが表示されます。 ラベルも作成する必要があります。
|
| 3. |
ツールボックスから、「Label」コントロールをForm1キャンバスにドラッグします。
|
| 4. |
「button1」をダブルクリックして、コード・ウィンドウを開きます。 Form1.csコード・ウィンドウが開きます。
|
| 5. |
以下のC# using文を、Public Class宣言の前に追加します。
using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
using Oracle.DataAccess.Types;
|
| 6. |
以下のC#コードをprivate void button1_Click(object sender, EventArgs e) {と、}の間に追加します。
string oradb = "Data Source=ORCL;User Id=hr;Password=hr;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select department_name from departments where department_id = 10";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
dr.Read();
label1.Text = dr.GetString(0);
conn.Dispose();
|
| 7. |
「Build」→「Build Solution」を選択します。
出力ウィンドウで、エラーがないことを確認します。 これで、フォームを実行できます。
|
| 8. |
「Debug」→「Start Without Debugging」を選択します。
|
| 9. |
フォームが表示されます。 「button1」をクリックします。
結果がラベルに表示されます。 コード内の問合せは、DEPARTMENT_IDが10の部門名を表示するためのものだったので、結果はAdministration部門になります。 Form1を閉じます。
|
トピック・リストに戻る
ハードコードされた問合せを実行する代わりに、テキストボックス・コントロールを追加して、ユーザーが入力するDEPARTMENT_IDを受け入れることができます。以下の手順を実行します。
| 1. |
「Form1.cs [Design] 」タブを選択します。 ツールボックスから、「TextBox」コントロールをForm1キャンバスにドラッグします。
テキスト・ボックスが表示されます。 このボックスは、好きな場所にドラッグできます。
|
| 2. |
「Label」コントロールをForm1キャンバスにドラッグします。
|
| 3. |
ラベルが表示されます。 「Label2」を右クリックして、「Properties」を選択します。
|
| 4. |
Propertiesシートで、テキスト・プロパティをEnter Department ID:に変更します。
|
| 5. |
「Form1.cs」タブを選択します。
|
| 6. |
バインド変数を使用して、テキスト・ボックスの値をSELECT文の一部に含めます。 バインド変数を使用すると、テキスト・ボックスの値が変わるたびに、データベースでSQL文を再解析する必要がなくなるので、パフォーマンスが向上します。
次のコードをconn.Open()文のすぐあとに追加します。
OracleParameter parm = new OracleParameter();
parm.OracleDbType = OracleDbType.Decimal;
parm.Value = textBox1.Text;
|
| 7. |
cmd.Parameters文をcmd.Connection文のすぐあとに追加します。
cmd.Parameters.Add(parm);
|
| 8. |
cmd.CommandText文のコードを次のように変更します。
cmd.CommandText = "select department_name from departments where department_id = :1";
|
| 9. |
「Build」→「Rebuild Solution」を選択します。
出力ウィンドウでエラーがないことを確認します。 エラーも警告もない場合は、次の手順に進みます。
|
| 10. |
「Debug」→「Start Without Debugging」を選択します。
|
| 11. |
Department IDに20と入力して、「button1」をクリックします。
|
| 12. |
Label1が部門名に変わることを確認します。 部門名は、Department IDフィールドに入力した値によって異なります。
|
| 13. |
Department IDに300と入力して、「button1」をクリックします。
|
| 14. |
IDが300の部門はないため、今回はエラーが表示されます。「Quit」をクリックします。 次のトピックでは、エラー処理を追加して、エラーが発生した理由を正確に把握できるようにします。
|
トピック・リストに戻る
エラー処理は、特定の機能が正常に動作していない場合に、その理由をユーザーに知らせるために必要となります。 このトピックでは、無効なDepartment IDを指定したときに、エラーが発生しないようにコードを変更します。 このチュートリアルでは、非常にシンプルなエラー処理コードを追加します。 より堅牢なエラー処理をおこなうには、構造化例外処理を使用する必要があります。 ODP.NETを使用した構造化例外処理について、詳しくは『ODP.NETオンライン・ドキュメント』を参照してください。 以下の手順を実行します。
| 1. |
Form1.csウィンドウで、次のコードを変更します。
dr.Read();
label1.Text = dr.GetString(0);
から
if (dr.Read())
{
label1.Text = dr.GetString(0);
}
else
{
label1.Text = "Department ID not found";
};
|
| 2. |
「Build」→「Rebuild Solution」を選択します。 出力ウィンドウでエラーがないことを確認します。
|
| 3. |
「Debug」→「Start Without Debugging」を選択します。
|
| 4. |
Department IDにもう一度300と入力して、「button1」をクリックします。
|
| 5. |
今回は、Department ID not foundというメッセージが表示されます。 Form1を閉じます。
|
トピック・リストに戻る
このトピックでは、リストボックスを使用して、複数の情報セットを取得します。 以下の手順を実行します。
| 1. |
「Form1.cs [Design]」タブをクリックします。 ツールボックスから、「Listbox」コントロールをForm 1キャンバスにドラッグします。
|
| 2. |
フォームに新しいリストボックスが表示されます。 リストボックスの配置とサイズ変更を適切におこなうことができます。 「Form1.cs」タブをクリックします。
|
| 3. |
cmd.Parameters.Add(parm);文を削除します。
|
| 4. |
次のcmd.CommandTextコードを変更します。
cmd.CommandText = "select department_name from departments where department_id = :1";
から
cmd.CommandText = "select department_id, department_name, city"
+ " from departments d, locations l"
+ " where d.location_id = l.location_id";
|
| 5. |
以下の一連のコードも変更します。
if (dr.Read())
{
label1.Text = dr.GetString(0);
}
else
{
label1.Text = "Department ID not found";
};
から
while (dr.Read())
{
listBox1.Items.Add("The " + dr.GetString(1)
+ " department is in " + dr.GetString(2));
}
|
| 6. |
「Build」→「Rebuild Solution」を選択します。
|
| 7. |
「Debug」→「Start Without Debugging」を選択します。
|
| 8. |
「button1」をクリックします。
|
| 9. |
リストにすべての部門とそれぞれの場所が表示されます。 Form1を閉じます。
|
トピック・リストに戻る
このチュートリアルで学習した内容は、次のとおりです。
 |
プロジェクトの作成と参照の追加 |
 |
データベースからのデータの取得 |
 |
インタラクティブ・コントロールとエラー処理の組込み |
 |
複数の列や行の取得 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|