ASP.NETの利点を引き出すODP.NET活用法:ODP.NETファーストステップ(2)(2/4 ページ)
Windowsプラットフォームにおけるアプリケーション開発は、.NETが主流となりつつある。本連載はVisual Basicから.NETへの移行を考えているOracleアプリケーション開発者に向けて、「Oracle Data Provider for .NET」を使うメリットや独自機能、新しいプログラミング・スタイルなどを解説する。(編集局)
OO4OとODP.NETの根本的な違い
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メソッドを呼び出します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ODP.NETを利用した実際のアプリケーションでは、接続型データアクセスと非接続型データアクセスを的確に使い分ける必要があります。例えば、参照処理や楽観的同時実行制御で問題のない更新処理を行う場合には非接続型を利用し、悲観的同時実行制御が必要な更新処理では、接続型を利用するなど、処理の性質によって接続型と非接続型を使い分けてください。
文キャッシングを使ったパフォーマンス向上
ASP.NETなどのWebアプリケーションでは、通常アプリケーション・サーバなどの中間層からデータベースへのアクセスを共有します。その場合、文キャッシングを利用すると、同一のコネクションで発行される同じSQLもしくはPL/SQL文を後続のクエリで実行した際、カーソルから解析された情報を再利用して実行するので、パフォーマンスの向上を得られます。文キャッシングを有効にするには、接続文字列属性に「Statement Cache Size」を指定します。Statement Cache Sizeで指定する値は、実際にキャッシュする文の最大数を指定します。以下の接続文字列属性では最大200の文をキャッシュする設定を行っています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
デフォルトでは、この属性は0に設定され、文キャッシングは無効です。指定された最大キャッシュ・サイズまで文がキャッシュされると、使用頻度の最も低い文が解放され、新しく作成された文をキャッシュするためのスペースが確保されます。キャッシュされた文をすべて消去するには、OracleConnectionのPurgeStatementCacheメソッドをコールします。また、文キャッシュを有効にするには、SQL文またはPL/SQL文にリテラル値ではなくパラメータを使用する必要があります。例えばテキストボックスの値をパラメータとして設定しているコードは以下のようになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
以下のコードのように、リテラル値でSQLまたはPL/SQL文を指定すると文キャッシュが有効になりません。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
(次ページへ続く)
Copyright © ITmedia, Inc. All Rights Reserved.