連載
» 2007年03月14日 00時00分 公開

小手調べにASP.NETからOracleに接続してみよう.NETユーザー必見! Oracle 10gのお作法(1)(3/4 ページ)

[三谷亮太,日本オラクル]

ASP.NETによるWebアプリケーションの作成

 準備が終わったところで、早速サンプルアプリケーションの作成に入ります。今回作成するのは、OracleのサンプルスキーマであるEMP表からデータを取得し、Web画面で編集・更新する単純なWebアプリケーションです。実装を容易にするため、エラー処理などは記述していません。

新規プロジェクトの作成

 Visual Studio 2005を起動し、メニューから[ファイル]→[新しいWebサイト]と選択します。図6のウィンドウが表示されたら[ASP.NET Webサイト]を選択します。IISがセットアップされていない環境でも動作可能とするため、[場所]から[ファイルシステム]を選択します。

図6 新規プロジェクトの作成(画像をクリックすると拡大します) 図6 新規プロジェクトの作成(画像をクリックすると拡大します)

 ODP.NETを使用可能にするため、メニューより[Webサイト]→[参照の追加]を選択し、.NETタブより「Oracle.DatAccess」を選択します(図7)。

図7 ODP.NETを使用可能にする 図7 ODP.NETを使用可能にする

データアクセス用クラスの作成

 データベース接続用のコードを再利用できるよう、データアクセス用のクラスを作成します(この方法ではODTを使用しないため、Visual Web Developer 2005 Express Editionでも開発可能です)。今回はADO.NET 2.0の新機能であるプロバイダ・ファクトリクラスおよび接続文字列ビルダを使ってOracleに接続します。

 プロバイダ・ファクトリクラスを使うことにより、データプロバイダ(データソース)に依存せずデータベース接続を行うことが可能です。具体的には、DbProviderFactoryにOracleClientFactoryを指定すれば、使用するデータプロバイダに依存しない汎用的なコードを記述できます。

 ソリューションエクスプローラーよりWebサイトを右クリックし[ASP.NETフォルダの追加]→[App_Code]を選択します(図8)。

図8 ソリューションエクスプローラーからフォルダの作成 図8 ソリューションエクスプローラーからフォルダの作成

 作成したApp_Codeフォルダ上で右クリックし、[新しい項目の追加]を選択します。クラスを選択し、名前に「DataAccess.vb」と入力してクラスを作成します(図9)。

図9 新規クラスの作成 図9 新規クラスの作成

 作成したクラスでODP.NETおよびDbProviderFactoryを参照しやすくするため、それぞれのクラスをインポートします(リスト1)。

Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types
Imports System.Data.Common
Imports System.Data
リスト1 ODP.NETとファクトリクラスのインポート設定(VB.NET)
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
リスト2 データベース接続オブジェクトはクラスで保持する(VB.NET)
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
リスト3 データベース接続用メソッド(VB.NET)
接続文字列は環境により変えてください。
C#のコードを表示する

 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
リスト4 SELECT用メソッド(VB.NET)
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
リスト5 UPDATE用メソッド(VB.NET)
C#のコードを表示する

 以上でデータアクセスクラスの実装は終了です。この時点でWebサイトをビルドしておきます。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。