この章の内容は次のとおりです。
Visual Studioでは、作成するすべての開発コードがグループ化され、プロジェクトと呼ばれるコンテナに入れられます。単純なプロジェクトのほとんどは、1つのファイルのみで構成されます。この項では、新しい開発プロジェクトの作成方法を説明します。
この章で作成するアプリケーションは、後続の章で行う操作の開始点になるため、このマニュアルに示す順に操作してください。
注意: 必要に応じて、Visual C#またはVisual Basicが指定されています。
新しいプロジェクトを開始するには、次の手順を実行します。
Visual Studioを起動します。
「スタート」メニューを開き、「すべてのプログラム」から「Microsoft Visual Studio 2008」を選択します。

Microsoft Visual Studio IDE環境が表示されます。
「Start Page」の「Recent Projects」ヘッダーの下にある「Create: Project」をクリックします。
または、「File」メニューから「New」、「Project」の順に選択します。
「New Project」ダイアログ・ボックスが表示されます。
「Project Types」で、作成するプロジェクトの種類を選択します。
Visual C#:
Visual C#: Windows
Visual Basic:
Other Languages: Visual Basic: Windows
「Templates」で「Windows Forms Application」を選択します。
「Name」フィールドに適切な名前を入力します。
Visual C#:
HR_Connect_CS
Visual Basic:
HR_Connect_VB
略語のCSはC#プロジェクトを、VBはVisual Basicプロジェクトを示します。
「Location」にファイルを保存するディレクトリを入力します。
このマニュアルに合わせて、このディレクトリをC:\HR_Projectsと入力します。
「Solution Name」に適切な名前(HR_Connect_CSまたはHR_Connect_VB)が表示されます。
1つのソリューションに複数のプロジェクトを格納できます。ソリューションに含まれるプロジェクトが1つのみの場合は、両方に同じ名前を使用できます。
「Create directory for solution」を選択します。
「OK」をクリックします。

プロジェクトが作成されます。
メイン・ウィンドウには、言語に応じて「HR_Connect_CS - Microsoft Visual Studio」または「HR_Connect_VB - Microsoft Visual Studio」のいずれかが新しいタイトルとして表示され、次に示すForm1が作成されます。
多くのプロジェクトの最初のフォームには、Form1という名前が自動的に付けられることに注意してください。これはフォーム・コントロールの名前です。この名前と、コード・ファイルに付けられる実際の名前を混同しないでください。通常、コード・ファイルの名前はForm1.csまたはForm1.vbです。
Form1とForm1.xxは、両方とも名前を変更できます。このマニュアルでは、Form1.xxの名前を何回か変更します。

この項では、データ・プロバイダであるOracle Data Provider for .NETが含まれるOracle.DataAccess.dllファイルへの参照を追加する方法を説明します。
参照を追加するには、次の手順を実行します。
「Project」メニューから「Add Reference」を選択します。

「Add Reference」ウィンドウが表示されます。
「Add Reference」ウィンドウの「.NET」タブでOracle.DataAccessを選択します。「OK」をクリックします。

「Solution Explorer」に新しい参照が表示されていることを確認します。

モジュール内でアセンブリの名前空間を指定できるように、Oracle名前空間ディレクティブを追加できます。これを行うには、C#のusing文またはVisual BasicのImports文をコード・ファイルの先頭または先頭付近に追加します。
|
注意: 参照を追加すると、アプリケーション内で名前空間を使用できるようになります。名前空間ディレクティブをアプリケーション・コードに追加することで、名前空間が明確になり、スコープの追加が可能になります。 |
Oracle名前空間ディレクティブを追加するには、次の手順を実行します。
Form1をアクティブにして、「View」メニューから「Code」を選択します。
または、[F7]キーボード・ショートカットを使用することもできます。

使用している言語に応じて、次の文を宣言のリストに追加します。
Visual C#:
他のusing文とともに、名前空間の前に追加します。
using Oracle.DataAccess.Client; using Oracle.DataAccess.Types;

Visual Basic:
ファイルの先頭の宣言部に追加します。
Imports Oracle.DataAccess.Client Imports Oracle.DataAccess.Types

「File」メニューから「Save」を選択するか、[Ctrl] + [S]キーボード・ショートカットを使用して、変更を保存します。
ユーザー・インタフェースは、デザイン・フォームにツールボックス・コントロールを追加して作成できます。このインタフェースは、ユーザーからの接続情報を受け入れます。
ツールボックス・コントロールを追加するには、次の手順を実行します。
「View」メニューから「Designer」を選択します。
Form1をまだ開いていない場合は、この操作でForm1が設計ビューに表示されます。
後で、「Code」と「Designer」を何度も切り替えます。 キーボード・ショートカットはそれぞれ[F7]と、[Shift] + [F7]です。
「View」メニューから「Toolbox」を選択します。
「Toolbox」で「Common Controls」を開きます。

「Toolbox」で「Label」を選択し、Form1にドラッグします。

Form1で「label1」を右クリックします。

「Properties」ウィンドウが表示されていない場合は、メニューから「Properties」を選択します。
「Properties」ウィンドウが表示されます。
「Properties」ウィンドウでTextプロパティをlabel1からUser IDに変更します。

手順4から7を2回繰り返し、さらに2つのラベルをForm1に置きます。それらのTextプロパティをPasswordとData Sourceに変更します。

「Toolbox」で「TextBox」を選択し、Form1の「User ID」ラベルの隣にドラッグします。

「Properties」ウィンドウで、NameプロパティをuserIDに変更します。

手順9から10を2回繰り返し、さらに2つテキスト・ボックスをForm1の既存のラベルの隣に配置します。それらのNameプロパティをpasswordとdataSourceに変更します。

「Password」ラベルの隣のテキストボックスを選択します。「Properties」ウィンドウで、PasswordCharプロパティまでスクロールして、このプロパティをアスタリスク(*)に設定します。
これにより、入力中のパスワードがマスクされます。

「Toolbox」で「Button」を選択し、Form1にドラッグします。
「Properties」ウィンドウで、このボタンのTextプロパティを「button1」から「Connect」に変更し、Nameプロパティをconnectに変更します。

保存します。
ツールボックスを閉じます。
ここでは、ユーザー・インタフェースに入力された情報を使用してデータベースに接続するコードを記述します。
データベースに接続するには、接続オブジェクトを作成する必要があります。
データベースに接続するコードを記述するには、次の手順を実行します。
この手順を実行すると、ユーザーがForm1のコントロールに入力したデータに基づいて、アプリケーションからデータベースに接続できるようになります。 「アプリケーションのコンパイルと実行」を参照してください。
「View」メニューから「Code」を選択します。
データベースの接続文字列をインスタンス化するために、次のコードを追加します。
Visual C#: 次のコードを使用して、Form1クラスのpublic Form1()ブロックの直後にクラス変数connを追加します。
private OracleConnection conn = new OracleConnection();

Visual Basic: 次のコードを使用して、Form1クラス宣言にconnクラス変数を追加します。
Public Class Form1
Dim conn As New OracleConnection

変更を保存します。
「View」メニューをクリックして「Designer」を選択し、「Designer」ビューに変更します。
Form1の「Connect」ボタンをダブルクリックし、connect_Click()メソッドのコード・ウィンドウを開きます。
次に示すコードをconnect_Click()メソッドに挿入します。
Visual C#:
conn.ConnectionString = "User Id=" + userID.Text + ";Password=" + password.Text + ";Data Source=" + dataSource.Text + ";"; conn.Open();
Visual Basic:
conn.ConnectionString = "User Id=" + userID.Text & _ ";Password=" + password.Text & _ ";Data Source=" + dataSource.Text conn.Open()
注意: 接続をオープンするには、ユーザーが入力したUser ID、PasswordおよびData Sourceの値から接続を作成する必要があります。Open()メソッドにより、実際の接続が作成されます。
connect_Click()メソッドの最後に次のコードを挿入し、このボタンのEnabled属性をfalseに設定します。
これにより、「Connect」ボタンは無効になります。正しく接続できた後は、このようにすることをお薦めします。
Visual C#:
connect.Enabled = false;

Visual Basic:
connect.Enabled = false

これで、Oracle Databaseに接続できるアプリケーションを記述できました。この後の項では、このアプリケーションの使用方法を説明します。
この項では、前の項で作成したアプリケーションをコンパイルして実行する方法を説明します。
アプリケーションをコンパイルして実行するには、次の手順を実行します。
「Build」メニューから「Build Solution」を選択します。

「Output」ウィンドウにエラーが表示されておらず、「View」メニューから使用できることを確認します。
標準的な出力結果は次のとおりです。

エラーがある場合は、「View」メニューから「Error List」を選択し、エラーを修正します。
「Debug」メニューから「Start Without Debugging」を選択して、アプリケーションを実行します。

Form1アプリケーションの「User ID」、「Password」および「Data Source」を入力します。
「Connect」をクリックします。
これにより、アプリケーションでtnsnames.oraファイルが使用されます。 「NET接続の別名の構成」を参照してください。
接続がオープンされたら、「Connect」ボタンは無効になります。これで、Oracle Databaseインスタンスへの接続が正しく実装されました。

アプリケーションでは、実行時エラーを正常に処理できる必要があります。 たとえば、間違ったパスワードを使用してログインしようとすると、ここまでに開発したアプリケーションではデータベース接続を確立できず、「ORA-1017: ユーザー名/パスワードが無効です。ログオンは拒否されました。」という未処理例外エラーで終了します。

「Start Without Debugging」を再度選択して、別のパスワードでログインを試行する必要があります。
エラー処理では、プログラム実行の標準フローとは異なる状況が発生した場合に、その対処方法を決定します。 Oracle Data Provider for .NETには、エラーを処理およびサポートする次の3つのクラスが含まれています。
OracleErrorクラスは、Oracleにより報告される警告またはエラーを表します。
OracleErrorCollectionクラスは、Oracle Data Provider for .NETによりスローされるすべてのエラーの集合を表します。これは、OracleErrorのリストを保持する単純なArrayListです。
OracleExceptionクラスは、Oracle Data Provider for .NETでエラーが発生したときにスローされる例外を表します。各OracleExceptionオブジェクトの「Error」プロパティには、エラーまたは警告を示す1つ以上のOracleErrorオブジェクトが含まれます。
.NET言語では、エラー処理にTry-Catch-Finallyブロック構造を使用します。この構造では、Tryコードがメイン・コードとなり、アプリケーションで実現する目標になります。次の2つの項で説明するように、Catchコードで様々な種類のエラーが取得されます。最後にあるFinallyブロックは常に実行されます。
Finallyブロックには、接続をクローズして破棄するDisposeメソッドが含まれることがよくあります。FinallyブロックにDisposeメソッドを記述すると、Try-Catch-Finallyブロックが完了した後、データベース接続は常にクローズされます。アプリケーションでのデータベース・アクセスが不要になった後にデータベース接続をクローズすることは、特にデータ・セキュリティなど、多くの理由で重要です。
クローズされているデータベース接続をクローズしようとしてもエラーは発生しません。この試行は適切でないように思われます。しかし、Dispose()をFinallyコード・ブロックに置くことで、接続が確実にクローズされるようになります。
次の項では、一般的なエラーでのTry-Catch-Finallyブロック構造の使用方法を説明します。その後の項では、Oracleエラーでの使用方法を説明します。
この項では、Try-Catch-Finallyブロックを使用して一般的なエラーを処理する方法を説明します。
一般的なエラーを処理するには、次の手順を実行します。
Try-Catch-Finally構文の実装を追加して、Form1のconnect_Click()メソッドのコードを変更します。
新しいコードは太字で示しています。
Visual C#:
private void connect_Click(object sender, EventArgs e)
{
conn.ConnectionString = "Data Source=ORCL;User Id="
+ userID.Text + ";Password=" + password.Text + ";";
try
{
conn.Open();
connect.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
conn.Dispose();
}
}
または、次のようにusingキーワードを使用して、有効でなくなった接続を破棄するC#構文を使用することもできます。
using (OracleConnection conn = new OracleConnection())
{
conn.Open();
// application code
...
}
Visual Basic:
Try conn.Open() connect.Enabled = false Catch ex As Exception MessageBox.Show(ex.Message.ToString()) Finally conn.Dispose() End Try
「Build」メニューから「Rebuild Solution」を選択します。
エラーがないことを確認します。
「Debug」メニューから「Start Without Debugging」を選択します。
「アプリケーションのコンパイルと実行」の手順に従ってアプリケーションを再度実行し、間違ったパスワードを使用して接続を試行します。 今度はアプリケーションでエラーが取得され、ポップアップ・ウィンドウに「ORA-1017: ユーザー名/パスワードが無効です。ログオンは拒否されました。」と表示されます。

次に示す完成したTry-Catch-Finallyブロック・コードでは、OracleExceptionがない場合は、最初のCatch文のブランチがスキップされます。2番目のCatch文のブランチで、その他のすべてのExceptionが取得されます。
最初のCatch文にはCase文が含まれており、これにより一般的なデータベース・エラーがトラップされ、ユーザーにわかりやすい方法で表示されます。
2番目のCase文では、データベースにアクセスできない場合に、特定のOracleExceptionが取得されます。
特定のエラーを処理するには、次の手順を実行します。
データベース・インスタンスを停止します。 付録A「Oracle Databaseインスタンスの起動および停止」を参照してください。
次の太字で示されているCatch OracleExceptionブロックを、connect_Click()メソッドに以前に追加したCatch Exceptionブロックの前に追加します。
Visual C#:
try
{
conn.Open();
connect.Enabled = false;
}
catch (OracleException ex)
{
switch (ex.Number)
{
case 1:
MessageBox.Show("Error attempting to insert duplicate data.");
break;
case 12560:
MessageBox.Show("The database is unavailable.");
break;
default:
MessageBox.Show("Database error: " + ex.Message.ToString());
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
conn.Dispose();
}
}
Visual Basic:
Try conn.Open() connect.Enabled = false Catch ex As OracleException ' catches only Oracle errors Select Case ex.Number Case 1 MessageBox.Show("Error attempting to insert duplicate data.") Case 12560 MessageBox.Show("The database is unavailable.") Case Else MessageBox.Show("Database error: " + ex.Message.ToString()) End Select Catch ex As Exception MessageBox.Show(ex.Message.ToString()) Finally conn.Dispose() End Try
「アプリケーションのコンパイルと実行」の手順に従ってアプリケーションを再度コンパイルして実行します。
ORA-12560エラーが、エラー番号なしで「The database is unavailable」としてポップアップ・ウィンドウに表示されることを確認します。

データベース・インスタンスを再起動します。 付録A「Oracle Databaseインスタンスの起動および停止」を参照してください。