ADO.NETでは、データベースへのアクセス方法には大きく接続型データアクセスと非接続型データアクセスという2通りの方法があることは、多くの方が知っていると思います。接続型データアクセスと非接続型データアクセスについては、すでに多くの情報が提供されているので、本稿では詳細には触れないことにします。ODP.NETは、ADO.NET準拠のデータプロバイダなので、ADO.NETの情報をそのままODP.NETに置き換えても問題ありません。
OO4Oには、非接続型データアクセスというアクセス方法はないので、接続型データアクセスでのOO4OとODP.NETの違いを表3にまとめました。
OraDynaset(OO4O) | OracleDataReader(ODP.NET) | |
---|---|---|
更新 | 更新可能 | 読み取りのみ、更新不可 |
読み取り | 前方・後方移動が可能 | 前方移動のみ |
表3 OraDynasetとOracleDataReaderの比較 |
ODP.NETを使った接続型のデータアクセスにはOracleDataReaderを使用します。OracleCommandのExecuteReaderメソッドをコールし、結果をOracleDataReaderに格納します。OracleDataReaderに相当するOO4OのオブジェクトはOraDynasetだと思ってよいでしょう。ここで注目したいのは、OracleDataReaderは更新ができないということです。接続型でデータ更新を行うにはOracleCommandに更新するためのSQLを設定し、ExecuteNonQueryメソッドを呼び出します。
Dim cnn As New OracleConnection |
リスト3 接続型でのデータ更新(VB.NET) |
OracleConnection cnn = new OracleConnection(); |
リスト4 接続型でのデータ更新(C#) |
ODP.NETを利用した実際のアプリケーションでは、接続型データアクセスと非接続型データアクセスを的確に使い分ける必要があります。例えば、参照処理や楽観的同時実行制御で問題のない更新処理を行う場合には非接続型を利用し、悲観的同時実行制御が必要な更新処理では、接続型を利用するなど、処理の性質によって接続型と非接続型を使い分けてください。
ASP.NETなどのWebアプリケーションでは、通常アプリケーション・サーバなどの中間層からデータベースへのアクセスを共有します。その場合、文キャッシングを利用すると、同一のコネクションで発行される同じSQLもしくはPL/SQL文を後続のクエリで実行した際、カーソルから解析された情報を再利用して実行するので、パフォーマンスの向上を得られます。文キャッシングを有効にするには、接続文字列属性に「Statement Cache Size」を指定します。Statement Cache Sizeで指定する値は、実際にキャッシュする文の最大数を指定します。以下の接続文字列属性では最大200の文をキャッシュする設定を行っています。
"User Id=scott;Password=tiger;Data Source=orcl;Statement |
注:⇒ は表示の都合で改行していることを示します |
デフォルトでは、この属性は0に設定され、文キャッシングは無効です。指定された最大キャッシュ・サイズまで文がキャッシュされると、使用頻度の最も低い文が解放され、新しく作成された文をキャッシュするためのスペースが確保されます。キャッシュされた文をすべて消去するには、OracleConnectionのPurgeStatementCacheメソッドをコールします。また、文キャッシュを有効にするには、SQL文またはPL/SQL文にリテラル値ではなくパラメータを使用する必要があります。例えばテキストボックスの値をパラメータとして設定しているコードは以下のようになります。
Dim cmd As New OracleCommand |
リスト5 パラメータを使用して文キャッシュを有効にするコード(VB.NET) |
OracleCommand cmd = new OracleCommand(); |
リスト6 パラメータを使用して文キャッシュを有効にするコード(C#) |
以下のコードのように、リテラル値でSQLまたはPL/SQL文を指定すると文キャッシュが有効になりません。
Dim cmd As New OracleCommand |
リスト7 文キャッシュが有効にならないコード(VB.NET) |
OracleCommand cmd = new OracleCommand(); |
リスト8 文キャッシュが有効にならないコード(C#) |
(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.