はじめに
前回より、Caché Managed Provider for .NETを使って、.NETアプリケーションからCachéを活用する手順を解説しています。第7回の今回は、Command
、DataReader
、DataAdapter
と、データベースのインスタンスをオブジェクトと見なしてアクセスできる拡張機能であるCachéプロキシについて解説します。
対象読者
- アプリケーション・システム開発をしている人
- データベース関連の開発およびメンテナンスをしている人
- JavaやC#でプログラミングしている人
CACHÉ Managed Provider for .NETの使い方 Part 2
CACHÉ ADO Providerクラスの概要
Caché .NET Managed Providerを使用すれば、Connection
、Command
、 DataReader
、DataAdapter
などの汎用ADO Providerクラスと完全に互換性のあるバージョンで、.NETプロジェクトからCachéデータベースにアクセスが可能です。Cachéには、次表にあるような固有の標準ADO Providerクラスがあります。
クラス名 | 説明 | 主なメソッド |
CacheConnection | 指定したCachéネームスペースのアプリケーションとデータベース間を接続する。 | Open ― 接続を開く。 Close ― 接続を切断する。 |
CacheCommand | CacheConnectionで指定したネームスペースでデータベースに対して実行するSQL文またはストアドプロシージャをカプセル化する。 | Command(string "SQL") ― SQLコマンドの表記をインスタンス化する。 Execute ― コマンドを実行し、データを返す。 ExecuteNonQuery ― INSERTなどの非クエリを実行する。 |
CacheDataReader | CacheCommandで指定した結果セットを取得する方法を提供する(シーケンシャルアクセス)。 | Read ― ネットワークキャッシュから単一行のクエリ結果テーブルを取得する。 GetInt、GetStringなど ― 列名または列番号を使用して、現在の行のデータを取得する。 |
CacheDataAdapter | CacheConnectionで指定したネームスペースでデータにマッピングされる結果セットをカプセル化する(ランダムアクセス)。 | Fill ― DataSetにデータソースのデータを入力する。 Update ― DataSetに加えられた変更をデータソースに戻す。 |
読み込み専用の単純なクエリは、CacheCommand
とCacheDataReader
だけで実行できます。すべてのデータベーストランザクションと同様に、単純なクエリの場合でもCacheConnection
オブジェクトを開いておく必要があります。
CacheCommandとCacheDataReaderを利用したSQLクエリ
この例では、既存の接続を使用する新しいCacheCommand
オブジェクトにSQLクエリ文字列が渡されます。クエリの結果は、CacheDataReader
オブジェクトに返されます。SQL文で指定した列名を参照することで、プロパティにアクセスできます。
string SQLtext = "SELECT * FROM Sample.Person WHERE ID < 10"; CacheCommand Command = new CacheCommand(SQLtext, CacheConnect); CacheDataReader reader = Command.ExecuteReader(); while (reader.Read()) { Display.WriteLine( reader[reader.GetOrdinal("ID")] + "\t" + reader[reader.GetOrdinal("Name")] + "\r\n\t" + reader[reader.GetOrdinal("Home_City")] + " " + reader[reader.GetOrdinal("Home_State")] + "\r\n"); };
列名ではなく、次のように列番号を指定することもできます。
while (reader.Read()) { Display.WriteLine( reader[0] + "\t" + reader[4] + "\r\n\t" + reader[7] + " " + reader[8] + "\n"); }
Caché .NETのサンプルプログラムbookdemosプロジェクトで、このそれぞれの実行結果を見てみましょう。上段が列名による結果で、下段が列番号による結果です。
また、この例にあるSample.Person
の氏名(Name
)がAで始まるデータを取得する場合には、CacheParameter
でName
の先頭の文字列がAである行をすべて取得するように設定し、CacheCommand
オブジェクトに渡します。このように、より複雑なSQLクエリが可能です。この結果セットへのアクセスは、上記と同様、CacheDataReader
オブジェクトを使います。
string SQLtext = "SELECT ID, Name, DOB, SSN " "FROM Sample.Person " + "WHERE Name %STARTSWITH ?" + "ORDER BY Name"; CacheCommand Command = new CacheCommand(SQLtext, CacheConnect); CacheParameter Name_param = new CacheParameter("Name_col", CacheDbType.NVarChar); Name_param.Value = "A"; Command.Parameters.Add(Name_param); CacheDataReader reader = Command.ExecuteReader(); while (reader.Read()) { Display.WriteLine( reader[reader.GetOrdinal("ID")] + "\t" + reader[reader.GetOrdinal("Name")] + "\r\n\t" + reader[reader.GetOrdinal("DOB")] + " " + reader[reader.GetOrdinal("SSN")] + "\r\n"); };
このCacheParameter
のサンプルコードを実行した結果を見てみましょう。確かにName
がAで始まる行が取得されたのが分かります。