SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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


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

前回に引き続き、.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のサンプルコード実行画面

次のページ
CACHÉプロキシオブジェクトを使ったアクセス方法

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
SQLも使えるオブジェクトデータベース「CACHE'」を知る連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1680 2008/09/04 12:52

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング