SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

特集記事

C++/CLIによるCライブラリの.NET化

C#でSQLiteを使うには


SQLitePetite: 最小限の機能を提供

 SQLiteの最小限のインターフェイスを考えましょう。要は指定したデータベースに対してSQL文を実行でき、SELECTの結果が得られればよいのですから、

  • open:データベースのオープン
  • close:データベースのクローズ
  • exec:SQL文の実行(と結果の取得)

 これらが実行できればよいことになります。これら3つを実装する小さな小さなライブラリ「SQLite3Petite」を作ります。

open SQLite3はデータベースとしてファイルもしくはメモリのいずれかが選べます。openの引数に文字列を与えればファイル、引数なしならメモリをデータベースとしてオープンすることにしましょう。
close 現在開けているデータベースをクローズします。引数はありません。
exec 下記参照。

 C版SQLiteのSQL実行関数、sqlite3_exec16は、

sqlite3_exec16
typedef int (*sqlite3_callback16)(void*,int,__wchar_t**, __wchar_t**);

int sqlite3_exec16(
  sqlite3 *db,                  /* データベース */
  const __wchar_t *zSql,        /* SQL文 */
  sqlite3_callback16 xCallback, /* 結果を返すコールバック */
  void *pArg,                   /* コールバックに渡す任意の値 */
  __wchar_t **pzErrMsg          /* エラーメッセージ格納場所 */
);

 というプロトタイプ宣言がされています。.NET言語(C#、VB、etc.)からも極力同じ使い勝手にそろえることにします。そのために.NETでのコールバックはdelegateを利用しましょう。

 C#からは次のようなコードでSQLiteが使えればいいと思っています。

こんな感じで使いたい
using System;
using SQLite3Petite;

  class Program {

    // 検索結果の出力
    static bool print(string[] values, string[] names) {
      for ( int i = 0; i < values.Length; ++i ) {
        Console.Write("{0} = [{1}] ", names[i], values[i]);
      }
      return true;
    }

    static void Main() {
      Database db = new Database();
      db.open("電話帳.db");
      string err;
      db.exec("SELECT 氏名, 電話番号 FROM 電話帳", print, out err);
      db.close();
    }
  }

}

 ソリューションにCLRクラスライブラリプロジェクト「SQLite3Petite」を追加して作業開始です。

プロジェクトSQLite3Petite
プロジェクトSQLite3Petite

次のページ
SQLite3Petite

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

特集記事連載記事一覧

もっと読む

この記事の著者

επιστημη(エピステーメー)

C++に首まで浸かったプログラマ。Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"りわんくま同盟でたまにセッションスピーカやったり中国茶淹れてにわか茶...

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1382 2008/08/19 19:22

イベント

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

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

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

メールバックナンバー