この章の内容は次のとおりです。
Oracle Developer Tools for Visual Studio(ODT)は、Visual Studio用に緊密に統合されたアドインです。ODTによりServer Explorerに組み込まれる拡張機能を使用することで、表、索引、制約、データ接続などのデータベース・スキーマ・オブジェクトを自動作成できます。また、アプリケーション・コードも自動生成できます。
この項では、データベース・スキーマ・オブジェクトを自動的に作成または変更するために、Server Explorerを使用してOracle Databaseに接続する方法を説明します。
データベースに接続するには、次の手順を実行します。
「View」メニューから「Server Explorer」を選択します。
Server Explorerで、「Data Connections」を右クリックします。
「Add Connection」を選択します。
「Add Connection」ウィンドウが表示されたら、「Data source」に「Oracle Database (Oracle ODP.NET)」と表示されているかどうかを確認します。
表示されている場合は、手順6に進みます。
「Data source」に「Oracle Database (Oracle ODP.NET)」と表示されていない場合は、「Change」を選択します。
「Change Data Source」ウィンドウが表示されます。
「Oracle Database」を選択してから、「Oracle Data Provider for .NET」を選択します。
「Add Connection」ウィンドウの「Connection Details」タブで、次の情報を入力します。
Data source name: リモート・データベース・インスタンスの別名orcl
などを使用します。
同じコンピュータ上のデータベースに接続する場合は、Local Database
を使用します。
「Use a specific user name and password」オプションを選択します。
「User name」にHR
と入力します。
「Password」に、hr
アカウントのロック解除と設定を行ったときに作成したパスワードを入力します。
後続のセッション用にパスワードを保存するには、「Save password」ボックスを選択します。
「Role」がDefault
に設定されていることを確認します。これにより、ユーザーhr
に付与されているデフォルトのロールが参照されます。
「Connection name」は「Data source name」および「User name」の値から自動生成されます。この演習では、HR.orclになります。
「Apply Filters」タブをクリックし、HR
スキーマが「Displayed schemas」列に含まれていることを確認します。データ接続のスキーマ・カテゴリ・ノードを開くと、「Apply Filters」タブで選択したスキーマ・オブジェクト(表、ビューなど)のみが表示されます。
「Test connection」をクリックします。
テストは成功するはずです。「OK」をクリックします。
テストが失敗した場合は、次のような問題が原因であると考えられます。後続の手順に進む前に、問題を解決する必要があります。
データベースが起動していない。
データベース・リスナーが起動していない。
データベース接続が正しく構成されていない。
ユーザー名、パスワードまたはロールが正しく入力されていない。
「Add Connection」ウィンドウで、「OK」をクリックします。
Server ExplorerでHR.ORCL接続を開き、HR
スキーマの内容を表示します。「Tables」、「Views」、「Procedures」、「Functions」、「Packages」、「Synonyms」、「Sequences」などが表示されます。
Oracle Developer Toolsには、データベース・オブジェクトを作成するためのユーザー・インタフェースが含まれています。この項では、DEPENDENTS
という名前の表を作成します。
表を作成するには、次の手順を実行します。
Server Explorerで、「Tables」を右クリックして「New Relational Table」を選択します。
表の設計ウィンドウが表示されます。
設計ビューで、「Table name」にDEPENDENTS
と入力します。
「Column Properties」タブで、次に示す6つの列を次の方法で追加します。
「Add」をクリックします。続いて、新しい列の情報を入力します。新しい列がすべて追加されるまで、繰り返し「Add」をクリックします。
フィールドはデータ型によって異なる場合があります。タブ全体にアクセスするには、Server ExplorerやSolution Explorerなどのウィンドウを閉じることが必要になる場合があります。
「Name」にLAST_NAME
、「Data Type」にVARCHAR2
、「Size」に30
を指定します。他のプロパティは、すべてデフォルト値のままにします。
「Name」にFIRST_NAME
、「Data Type」にVARCHAR2
、「Size」に20
を指定します。他のプロパティは、すべてデフォルト値のままにします。
「Name」にBIRTH_DATE
、「Data Type」にDATE
を指定します。他のプロパティは、すべてデフォルト値のままにします。
「Name」にRELATIONSHIP
、「Data Type」にVARCHAR2
、「Size」に20
を指定します。他のプロパティは、すべてデフォルト値のままにします。
「Name」にEMPLOYEE_ID
、「Data Type」にNUMBER
を指定し、「Allow null」を選択解除します。「Precision」に6
、「Scale」に0
を入力します。
「Name」にDEPENDENT_ID
、「Data Type」にNUMBER
を指定し、「Allow null」チェック・ボックスを選択解除します。「Precision」に6
、「Scale」に0
を入力します。
「Preview SQL」をクリックします。
表を作成するSQL文が「Preview SQL」ウィンドウに次のように表示されます。
「OK」をクリックして「Preview SQL」ウィンドウを閉じます。
表の設計ビューで「Save」をクリックします。
この操作により、HR
スキーマに新しい表DEPENDENTS
が作成されます。新しい表がServer Explorerにリストされます。
索引はオプションですが、非常に役立つリレーショナル・データベースの機能です。索引を使用すると表の行(またはレコード)にすばやくアクセスできます。この項では、DEPENDENTS
表に索引を作成します。
索引を作成するには、次の手順を実行します。
DEPENDENTS
の表の設計ビューで「Indexes」タブをクリックします。
「Indexes」領域の下にある「Add」をクリックします。
「Index Properties」領域がアクティブになります。
「Index Properties」の下(右側)にある「Name」にDEPENDENTS_INDEX
と入力し、他のプロパティはすべてデフォルトのままにします。
「Index Properties」領域の下部で、「Add」をクリックします。
「Index keys」の下で「Key」列の最初のセルをクリックし、リストから「DEPENDENT_ID」を選択します。
「Preview SQL」をクリックします。
「Preview SQL」ウィンドウが表示され、索引を作成するSQL文が表示されます。
「OK」をクリックして「Preview SQL」ウィンドウを閉じます。
表の設計ビューで「Save」をクリックします。
これで、HR
スキーマの表DEPENDENTS
に新しい索引が作成されます。作成された索引をServer Explorerで確認するには、DEPENDENTS
表および関連する索引を開きます。
データベースで制約を使用すると、許容できるデータ値に対し、データ整合性の定義ルールが自動的に施行されます。また、この制約により、表の主キーや外部キーも実装されます。この項では、新しい表DEPENDENTS
にこのような制約を追加します。
外部キーおよび主キーを追加するには、次の手順を実行します。
DEPENDENTS
表の設計ビューで、「Constraints」タブをクリックします。
構成によっては、すでにデフォルトのチェック制約がリストに含まれていることがあります。
「Constraints」領域の下で、次に示す制約を次の方法で追加します。
「Constraint Properties」の下の「Add」をクリックします。続いて、新しい制約の情報を入力します。新しい制約がすべて追加されるまで、繰り返し「Add」をクリックします。
「Name」にEMPLOYEES_FK
、「Type」にForeign Key
、「Table」にEMPLOYEES
、「Constraint」にEMP_EMP_ID_PK
を指定します。「Association」の下で、「Referenced Column:」にEMPLOYEE_ID
、「Local Column:」にEMPLOYEE_ID
を選択し、「On delete」値にCascade
を設定します。他のプロパティは、すべてデフォルト値のままにします。
「Name」にDEPENDENTS_PK
、「Type」にPrimary Key
を指定します。
「Primary key columns」領域の下で、「Add」をクリックします(下にスクロールすることが必要な場合があります)。「Primary Key Columns」の下で、「Key:」にDEPENDENT_ID
を選択し、「Using index」値にDEPENDENTS_INDEX
を設定します。他のプロパティは、すべてデフォルト値のままにします。
「Preview SQL」ウィンドウに、表DEPENDENTS
の制約用に生成されたコードが表示されます。制約により、表のDEPENDENT_ID
列とEMPLOYEE_ID
列の定義が変更されるため、制約の追加にはALTER TABLE
コマンドが使用されます。
「OK」をクリックして「Preview SQL」ウィンドウを閉じます。
表の設計ビューで「Save」をクリックします。
この操作により、新しい2つの制約がHR
スキーマのDEPENDENTS
表に作成されます。Server Explorerを確認するには、表DEPENDENTS
および制約の階層ツリーを開きます。
ここで、新しいDEPENDENTS
表にデータを追加する必要があります。
表にデータを移入するには、次の手順を実行します。
Server Explorerで、DEPENDENTS
表を右クリックして「Retrieve Data」を選択します。
DEPENDENTS
の表グリッドが設計ビューに表示されます。
表5-1に示す4つのレコードを、この表グリッドに追加します。
表5-1 DEPENDENTS表の新しいデータ
LAST_NAME | FIRST_NAME | BIRTH_DATE | RELATIONSHIP | EMPLOYEE_ID | DEPENDENT_ID |
---|---|---|---|---|---|
Ernst |
Mary |
06-MAY-2000 |
daughter |
104 |
1041 |
Atkinson |
Sue |
12-JUL-1998 |
daughter |
130 |
1301 |
Ernst |
David |
02-APR-2007 |
son |
104 |
1042 |
Sciarra |
Aaron |
31-JAN-2008 |
son |
111 |
1111 |
グリッドは次のようになります。
行を移動すると、データは自動的に保存されます。
DEPENDENTS
表の内容を確認するために、表の単純な問合せを使用するフォームを作成します。この項では、Visual Studio統合開発環境(IDE)を使用して、操作に対応するコードを自動生成します。
新しいデータソースを作成するには、次の手順を実行します。
「新しいプロジェクトの作成」の説明に従って、新しいプロジェクトを開始します。新しいプロジェクトには、次に示す名前を付けます。
Visual C#:
HR_ODT_CS
Visual Basic:
HR_ODT_VB
「Create Directory for Solution」を選択します。「OK」をクリックします。
設計ビューが表示されていない場合は、Form1の設計ビューに切り替えます。
注意: すべてのアプリケーションはForm1から開始しますが、これまでの章で作成したアプリケーションとの関係はありません。
「Server Explorer」ウィンドウをクリックし、「Show Data Sources」ウィンドウを有効にします。
Visual Studioの「Data」メニューから「Show Data Sources」を選択します。
「Data Source」ウィンドウが表示されます。
「Data Sources」ウィンドウで、「Add New Data Source」をクリックします。
「Data Source Configuration Wizard」が開きます。
「Data Source Configuration Wizard」の「Choose a Data Source Type」で「Database」を選択します。
「Next」をクリックします。
「Choose Your Data Connection」で、「HR.ORCL」または「HR.(Local Database)」を選択します。この例では、HR.ORCLを使用します。
「Yes, include sensitive data in the connection string」を選択します。
「Next」をクリックします。
「Save the Connection String to the Application Configuration File」で、「Yes, save the connection as:」にConnectionString
を選択します。
「Next」をクリックします。
「Choose Your Database Objects」で、「Tables」を開きます。
「DEPENDENTS(HR)」表を選択します。
「DataSet name」をtableDependentsに変更します。
「Finish」をクリックします。
ドラッグ・アンド・ドロップでコードを自動生成するには、次の手順を実行します。
Form1の設計ビューに切り替えます。
「Data Sources」ウィンドウで、「tableDependents」を開きます。
DEPENDENTS表を選択し、Form1にドラッグします。
フォームと表グリッドの両方のサイズ調整が必要になる場合があります。
表グリッド(レコード・ナビゲーション要素を含む)の他に、次のコンポーネントがプロジェクトの設計ビューに追加されます。これらのオブジェクトは、Form1に自動生成されるコードを表しています。
Visual C#:
tableDependents
、dEPENDENTSBindingSource
、dEPENDENTSTableAdapter
、tableAdapterManager
およびdEPENDENTSBindingNavigator
Visual Basic:
TableDependents
、DEPENDENTSBindingSource
、DEPENDENTSTableAdapter
、TableAdapterManager
およびDEPENDENTSBiningNavigator
Form1の上部付近にある「Save」アイコン(フロッピー・ディスク)をダブルクリックします。
これにより、Form1の「Save」アイコンのコード・ウィンドウが開きます。
プライベート・メソッドxxx
SaveItem_Click()
で、try...catch
ブロックに既存のコードをカプセル化します。この自動生成されたメソッドのVisual C#およびVisual Basicの完全な名前は、次に示すコードを参照してください。
また、MessageBox.show()
コールをTryセクションおよびCatchセクションの両方に追加します。更新したメソッド・コードを次に示します。新しいコードまたは変更されたコードは太字で表しています。
Visual C#:
private void dEPENDENTSBindingNavigatorSaveItem_Click(object sender, EventArgs e) { try { this.Validate(); this.dEPENDENTSBindingSource.EndEdit(); this.tableAdapterManager.UpdateAll(this.tableDependents); MessageBox.Show("Update successful"); } catch (System.Exception ex) { MessageBox.Show("Update failed: "+ ex.Message.ToString()); } }
Visual Basic:
Private Sub DEPENDENTSBindingNavigatorSaveItem_Click( ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DEPENDENTSBindingNavigatorSaveItem.Click Try Me.Validate() Me.DEPENDENTSBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.TableDependents) MessageBox.Show("Update successful") Catch ex As Exception MessageBox.Show("Update failed: " + ex.Message.ToString()) End Try End Sub
アプリケーションをコンパイルして実行するには、「アプリケーションのコンパイルと実行」の手順に従います。
次の方法で、新しいアプリケーションをテストできます。フロッピー・ディスク・アイコンは、「Save」コマンドを表しています。
アプリケーションをテストするには、次の手順を実行します。
Mary Ernstの「DEPENDENT_ID」
の値を1110
に変更し、「Save」アイコンをクリックします。メッセージ・ボックスUpdate successful
が表示されます。「OK」をクリックしてメッセージ・ボックスを閉じます。
David Ernstの「EMPLOYEE_ID」
の値を99999
に変更し、「Save」アイコンをクリックします。「更新に失敗しました。: ORA-02291: 整合性制約(HR.EMPLOYEES_FK)に違反しました - 親キーがありません」
というメッセージが表示されます。「OK」をクリックしてメッセージ・ボックスを閉じます。