小手調べにASP.NETからOracleに接続してみよう:.NETユーザー必見! Oracle 10gのお作法(1)(3/4 ページ)
オラクル社が提供する3つの.NET環境用開発ツール「ODP.NET」「ODT」「ODE.NET」。Oracle 10gリリース2に対応した最新版を使って、Oracleデータベースを前提とした.NETアプリケーションの開発手法を解説する。(編集部)
ASP.NETによるWebアプリケーションの作成
準備が終わったところで、早速サンプルアプリケーションの作成に入ります。今回作成するのは、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
(C#のコードを表示する)
複数のメソッドから利用するため、データベース接続関連のオブジェクトはクラスに保持します(リスト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
(C#のコードを表示する)
データアクセスメソッドの実装
データベース接続、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
(C#のコードを表示する)
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
(C#のコードを表示する)
以上でデータアクセスクラスの実装は終了です。この時点でWebサイトをビルドしておきます。
Copyright © ITmedia, Inc. All Rights Reserved.



