「GrapeCity コンポーネント活用」シリーズは、Microsoft Visual Studio.NETとVBユーザーや.NETユーザーから高い支持を受けているグレープシティ社のコンポーネント製品を組み合わせたOracle対応アプリケーションの開発方法について説明します。
実際のサンプルアプリケーションを提供することにより、単なるコーディングTipsにとどまらず、より実践的なアプリケーション開発の資料として構成するようにしております。今回はInputMan編ということで、グレープシティ社が提供しているInputManとOracleが提供している.NETからOracleデータベースへネイティブに接続するためのミドルウェアである「Oracle Data Provider for .NET(以下、ODP.NET)を利用したアプリケーションの開発方法について、実際のサンプルアプリケーションを動かしながら確認することができます。今回のサンプルアプリケーションの説明はポイントとなる部分のみの説明になりますので予めご了承ください。 「意外と簡単!? .NETでOracle」シリーズが.NET開発者でオラクルを利用したい方のシステム構築の一助になれば幸いです。
InputManはテキスト、日付・時刻、数値、マスク、コンボなどの目的に合わせて最適化された入力インタフェースコントロールのセットです。XPテーマとOfficeライクなアクティブフラットの2つのスタイルにより、洗練された外観を簡単に実現できます。これらのコントロールに搭載された機能の多くは、プロパティを設定するだけで実現できるため、コーディング量と開発工数を大幅に削減します。エンドユーザーが感じる迷いや陥りやすい誤りを未然に防ぐ設計のInputMan for .NETは、自然でスムーズな入力を可能にし、アプリケーションの基本となる入力インタフェースの構築を強力に支援します。
InputManのより詳細な情報はグレープシティ社の以下のURLを参照してください。 グレープシティ社 − InputMan製品情報 http://www.grapecity.com/japan/support/database/P7_307.htm 今回はInputManの2006年1月時点で最新版のバージョンである、「InputMan for .NET 3.0J」を使用しております。
サンプルアプリケーションは以下のサイトよりダウンロードできます。 http://otndnld.oracle.co.jp/easy/dotnet/inputman/sample.zip ダウンロードファイル(sample.zip)を任意の一時フォルダに保存し、解凍してください。解凍しますと「InputManDemo」、「Config」という2つのフォルダが作成されます。それぞれのフォルダには以下の情報が格納されています。
![]() 画像ファイルをコピーしたら、「Config」フォルダ内の「gen_inputman.sql」をSQL*PLUSなどから以下のように実行してください。このSQLスクリプトの実行は、リモート実行ではなく、ターゲットのデータベースサーバーで実行します。 実行する際に、ユーザー名/パスワードを求められますので、その際にはSYSTEMユーザーとそのパスワードを入力してください。
C:¥>sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on 火 2月 14 09:12:05 2006 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> @gen_inputman *---------------------------------------* * please enter password of system * *---------------------------------------* Enter password: 接続されました。 ユーザーが作成されました。 権限付与が成功しました。 -<省略> - PL/SQLプロシージャが正常に完了しました。 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。
サンプルアプリケーションを実行させるためのOracleのデータベース・オブジェクトを作成したら、次にサンプルアプリケーションの動作確認をおこなってみましょう。ダウンロードファイル(sample.zip)を解凍後に作成されるInputManDemoディレクトリ下にある、VS.NETのソリューションファイル「InputManDemo.sln」をVS.NETから開いてください。InputManDemo.slnファイルには「InputManDemo」プロジェクトが含まれているのが、ソリューション・エクスプローラから確認できます。
![]() 今回のサンプルアプリケーションを実行するには、ODP.NETがインストールされ、VS.NETから参照設定が適切におこなわれている必要があります。ODP.NETのインストール方法などは、「意外と簡単!? .NETでオラクル」スマートクライアント編の「Oracle Data Provider for .NETのインストール」を参照してください。ODP.NETをVS.NETから利用するための準備が整いましたら次にODP.NETからOracleデータベースに接続するための接続文字列を変更します。InputManDemoプロジェクト内にある、Form1.vbのデザイン画面を開き、「empOracleConnection1」コントロールと「departmentOracleConnection1」コントロールの「ConnectionString」プロパティを変更してください。 ![]() 初期状態では以下のように設定されています。 User Id=inputman;Data Source=ORCL10GR2;Password=oracle; 「User Id」では「inputman」と指定していますが、こちらは先ほど説明した「Config」フォルダ内の「gen_inputman.sql」を実行していれば、「inputman」ユーザーが作成されています。「Data Source」はOracleデータベースへ接続するためのデータソース名となります。接続文字列を適切に設定したら、次にASP.NET WEBアプリケーションを実行してみましょう。VS.NETのメニュー「デバッグ(D)」−>「開始(S)」を選択して実行します。 ![]() 以上のようにInputManのコントロールを使用したWindowsフォームの画面が確認できます。
では、実際にInputManのコンポーネントからODP.NETを利用してOracleに格納された情報の表示と入力をおこなってみましょう。
今回のサンプルアプリケーションでは、Oracleデータベースからデータを取得しDataSetに格納、DataSetの内容をInputManに連携して表示しています。実際の手順は以下のようになります。
画像などを扱うBLOBフィールドの内容もInputManのコンポーネントで表示することが可能です。今回のサンプルアプリケーションでは実際にBLOBフィールドに格納された社員のイメージ情報をInputManのリストボックスコントロールとコンボボックスコントロールで表示しています。
![]() 「employee」テーブルの画像が格納されたBLOBフィールドである「ephoto」列を表示するには、まずInputManのリストボックス、もしくはコンボボックスの「ImageMember」プロパティに「ephoto」列を指定します。 ![]() 次に、ListBoxStyleプロパティとTextプロパティの値を画像が表示できるように設定します。 ![]() 以上のようにInputManの標準の機能を利用することで、簡単にOracleデータベース内に格納されているBLOBフィールドの画像を表示できるのが確認できたかと思います。 ListBoxStyleとTextBoxStyleプロパティの内容はそれぞれ以下のようになります。 プロパティ値 − GrapeCity.Win.Input.ListBoxStyle 型 (既定値:ListBoxStyle.Text)
プロパティ値 − GrapeCity.Win.Input.TextBoxStyle 型 (既定値:GrapeCity.Win.Input.TextBoxStyle.TextOnly)
各プロパティの詳細についてはInputManのマニュアルを参照してください。
今回のサンプルでは、「dynamicSetProperties()」メソッドを利用して、「employee」テーブルのフィールド属性を取得し、InputManのプロパティに設定しています。文字列フィールドの場合は、入力文字列の長さを設定するためにInputManのEditコンポーネントMaxLengthプロパティの値を設定しています。また、数値列に関しては、Oracleの数値列から桁数を取得し、InputManのNumberコンポーネントFormatプロパティにセットしています。具体的な手順は以下のようになります。
InputManのコンポーネントとOracleデータベースのデータを連携する場合に、今回のサンプルで紹介したようにDataSetを利用します。この場合、OracleDataAdapterを使用してOracleデータベースのデータをDataSetに取り込みますが、Oracle固有のデータ型は、暗黙的にOracleのデータ型に最適な.NETのデータ型に変換されます。しかし、双方のデータ型の特性からDataSetにデータを取り込んで処理する際に、データが失われる危険性が存在しています。具体的には、以下の表のOracleデータ型が該当します。
このような場合に、ODP.NETでは、OracleDataAdapaterのSafeMappingプロパティを使用することにより、Oracleデータ型をDataSetにおいて、.NETのString型、もしくはOracle書式での.NETのbyte[]で表すことにより、データ損失の危険性を防ぐことが可能です。しかしながら、表の値をみても分かるとおり、多くの業務アプリケーションにおいては問題となる場合がないと考えられます。よって今回はDATE型を例にしたSafeMappingのみ解説いたします。
-<省略> - cmd.CommandText = "SELECT empno, hiredate FROM employee" Dim da As New OracleDataAdapter(cmd) da.SafeMapping.Add("HIREDATE", GetType(System.String)) Dim ds As New DataSet If ds.Tables.Contains("employee") Then ds.Tables("employee").Clear() da.Fill(ds, "employee") -<省略> - 設計時に列名が不明な場合は、アスタリスク(*)を使用すると、データベース型のすべての列を安全な.NETタイプにマップできます。 da.SafeMapping.Add("*", GetType(System.String)) その他の型の詳細に関しましては、ODP.NETのマニュアル「Oracle Data Provider for .NET開発者ガイド」を参照してください。 メモ:SafeMappingにて指定する列名に関しては、必ず大文字で設定する必要があります。 また、SELECT文で別名を指定している場合は、その別名を適切に指定してください。 例)別名を指定している場合 SELECT empno, hiredate as 入社日 FROM emp da.SafeMapping.Add("入社日", GetType(System.String)) 今まで説明したように、ODP.NETとInputManで使用するコンポーネントの親和性は非常に優れています。ODP.NETを利用することによりOracleデータベースに高速にアクセス可能なアプリケーションを開発することが可能です。また、ODTを利用すればアプリケーションの開発生産性を高め、さらにInputManを組み合わせることにより洗練された外観とインタフェースを簡単に実現にできます。是非お試しください。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||