準備が終わったところで、早速サンプルアプリケーションの作成に入ります。今回作成するのは、OracleのサンプルスキーマであるEMP表からデータを取得し、Web画面で編集・更新する単純なWebアプリケーションです。実装を容易にするため、エラー処理などは記述していません。
Visual Studio 2005を起動し、メニューから[ファイル]→[新しいWebサイト]と選択します。図6のウィンドウが表示されたら[ASP.NET Webサイト]を選択します。IISがセットアップされていない環境でも動作可能とするため、[場所]から[ファイルシステム]を選択します。
ODP.NETを使用可能にするため、メニューより[Webサイト]→[参照の追加]を選択し、.NETタブより「Oracle.DatAccess」を選択します(図7)。
データベース接続用のコードを再利用できるよう、データアクセス用のクラスを作成します(この方法ではODTを使用しないため、Visual Web Developer 2005 Express Editionでも開発可能です)。今回はADO.NET 2.0の新機能であるプロバイダ・ファクトリクラスおよび接続文字列ビルダを使ってOracleに接続します。
プロバイダ・ファクトリクラスを使うことにより、データプロバイダ(データソース)に依存せずデータベース接続を行うことが可能です。具体的には、DbProviderFactoryにOracleClientFactoryを指定すれば、使用するデータプロバイダに依存しない汎用的なコードを記述できます。
ソリューションエクスプローラーよりWebサイトを右クリックし[ASP.NETフォルダの追加]→[App_Code]を選択します(図8)。
作成したApp_Codeフォルダ上で右クリックし、[新しい項目の追加]を選択します。クラスを選択し、名前に「DataAccess.vb」と入力してクラスを作成します(図9)。
作成したクラスでODP.NETおよびDbProviderFactoryを参照しやすくするため、それぞれのクラスをインポートします(リスト1)。
Imports Oracle.DataAccess.Client Imports Oracle.DataAccess.Types Imports System.Data.Common Imports System.Data
複数のメソッドから利用するため、データベース接続関連のオブジェクトはクラスに保持します(リスト2)。
Public Class DataAccess 'データベース接続関連はクラスで保有 Dim factory As DbProviderFactory Dim ocsb As DbConnectionStringBuilder '接続文字列ビルダ Dim conn As DbConnection Dim cmd As DbCommand Dim da As DbDataAdapter Dim ds As DataSet
データベース接続、SELECT、UPDATE用のメソッドをそれぞれ作成します。SELECT、UPDATE用のメソッドからそれぞれ接続メソッドを呼び出す形となります。接続用メソッドでは接続文字列ビルダを使用して接続文字列を生成します。(リスト3)。
Public Function DbConnect() As DbConnection factory = _ DbProviderFactories.GetFactory("Oracle.DataAccess.Client") ocsb = factory.CreateConnectionStringBuilder ocsb("Data Source") = "ORCL10GR2" ocsb("User ID") = "Scott" ocsb("Password") = "Tiger" conn = factory.CreateConnection() conn.ConnectionString = ocsb.ConnectionString 'データベース接続 conn.Open() Return conn End Function
SELECT用メソッドは戻り値としてDataSetを返します(リスト4)。
Public Function GetData() As DataSet conn = Me.DbConnect cmd = conn.CreateCommand cmd.CommandText = "SELECT * FROM DEPT" da = factory.CreateDataAdapter() da.SelectCommand = cmd ds = New DataSet 'SELECTの実行 da.Fill(ds) Return ds End Function
UPDATE用メソッドには戻り値を設定する必要はありません。
Public sub EditDept(ByVal DEPTNO As Int32, ByVal DNAME As String, _ ByVal LOC As String) Dim sql As String 'パラメータは使い回さないためメソッド内で宣言 Dim prmDEPTNO As DbParameter Dim prmDNAME As DbParameter Dim prmLOC As DbParameter 'パラメータはバインド変数で渡す sql = "Update DEPT set " sql &= " DNAME = :DNAME," sql &= " LOC = :LOC" sql &= " Where DEPTNO = :DEPTNO" conn = Me.DbConnect cmd = conn.CreateCommand cmd.CommandType = CommandType.Text cmd.CommandText = sql 'パラメータ定義 prmDNAME = cmd.CreateParameter prmDNAME.Value = DNAME cmd.Parameters.Add(prmDNAME) prmLOC = cmd.CreateParameter prmLOC.Value = LOC cmd.Parameters.Add(prmLOC) prmDEPTNO = cmd.CreateParameter prmDEPTNO.Value = DEPTNO cmd.Parameters.Add(prmDEPTNO) 'UPDATE実行 cmd.ExecuteNonQuery() End Sub
以上でデータアクセスクラスの実装は終了です。この時点でWebサイトをビルドしておきます。
Copyright © ITmedia, Inc. All Rights Reserved.