Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

第7回 CACHÉを活用した.NETアプリケーション開発(後半)

SQLも使えるオブジェクトデータベース「CACHE'」を知る 7

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2007/09/12 15:10

前回に引き続き、.NETアプリケーションからオブジェクトデータベース「Cache'」を活用する方法を解説します。後編では、Command、DataReader、DataAdapterと、データベースのインスタンスをオブジェクトと見なしてアクセスできる拡張機能「Cache'プロキシ」を紹介します。

目次

はじめに

 前回より、Caché Managed Provider for .NETを使って、.NETアプリケーションからCachéを活用する手順を解説しています。第7回の今回は、CommandDataReaderDataAdapterと、データベースのインスタンスをオブジェクトと見なしてアクセスできる拡張機能であるCachéプロキシについて解説します。

対象読者

  • アプリケーション・システム開発をしている人
  • データベース関連の開発およびメンテナンスをしている人
  • JavaやC#でプログラミングしている人

CACHÉ Managed Provider for .NETの使い方 Part 2

CACHÉ ADO Providerクラスの概要

 Caché .NET Managed Providerを使用すれば、ConnectionCommandDataReaderDataAdapterなどの汎用ADO Providerクラスと完全に互換性のあるバージョンで、.NETプロジェクトからCachéデータベースにアクセスが可能です。Cachéには、次表にあるような固有の標準ADO Providerクラスがあります。

CACHE' 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に加えられた変更をデータソースに戻す。

 読み込み専用の単純なクエリは、CacheCommandCacheDataReaderだけで実行できます。すべてのデータベーストランザクションと同様に、単純なクエリの場合でもCacheConnectionオブジェクトを開いておく必要があります。

CacheCommandとCacheDataReaderを利用したSQLクエリ

 この例では、既存の接続を使用する新しいCacheCommandオブジェクトにSQLクエリ文字列が渡されます。クエリの結果は、CacheDataReaderオブジェクトに返されます。SQL文で指定した列名を参照することで、プロパティにアクセスできます。

Sample.PersonテーブルのIDが10未満のデータを表示するコード
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プロジェクトで、このそれぞれの実行結果を見てみましょう。上段が列名による結果で、下段が列番号による結果です。

CacheCommandのサンプルコード実行画面
CacheCommandのサンプルコード実行画面

 また、この例にあるSample.Personの氏名(Name)がAで始まるデータを取得する場合には、CacheParameterNameの先頭の文字列がAである行をすべて取得するように設定し、CacheCommandオブジェクトに渡します。このように、より複雑なSQLクエリが可能です。この結果セットへのアクセスは、上記と同様、CacheDataReaderオブジェクトを使います。

Nameの先頭がAである行を取得するコード
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で始まる行が取得されたのが分かります。

CacheParameterのサンプルコード実行画面
CacheParameterのサンプルコード実行画面

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • トップスタジオ(トップスタジオ)

    1997年の創立以来、一貫してPC/IT関連書籍、雑誌等記事の制作業務を手掛けるプロフェッショナル集団。翻訳・編集・DTPのほか、技術監修や著作も多数。

バックナンバー

連載:SQLも使えるオブジェクトデータベース「CACHE'」を知る

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5