Portable Class Library for SQLiteを使ってみた その3

3回目です。

積み残しの、パラメータドクエリーを使用する方法です。

今までの例ではアドホックなクエリを使用していましたが、Foreach()やループ処理では一々アドホックなクエリーをつくっていられないでしょうし、美しくないのでパラメータ化されたクエリを使用したいですよね。

具体的には以下のコードのようにSQLiteStatementクラスのBindメソッドを使用します。

// パラメータドクエリを使用する場合
var stmBind = con.Prepare("INSERT INTO Test (ID, Name) VALUES(@id, @name)");
for (int i = 0; i < 10; i++)
{
    //ResetでStatementを初期状態に戻す(連続で同じステートメントを使用するなら必須)
    stmBind.Reset();
    //設定されたBindをクリアする。(連続で同じステートメントを使用するなら必須)
    stmBind.ClearBindings();
    //名前もしくはパラメータ順序, 値で指定する
    stmBind.Bind("@id", i + 11);
    stmBind.Bind("@name", "Jone" + i);
    result = stmBind.Step();
    Console.WriteLine("{0}:{1}", i, result);
}
stmBind.Dispose();

先ずクエリーを2行目のようにパラメータ付きのクエリーとして記述します。

次に10,11行目のようにBindメソッドでクエリーのパラメータに値を結びつけます。

また、上の例のようにループ処理の中などで、おなjクエリーを複数回利用する場合には、Bindメソッドを呼び出す前にResetメソッドを呼び出してStatementの状態を初期化し、RestBindingsメソッドを呼び出して、既存の設定をリセットします。この二つの処理をしておかないと、2周目のBindメソッド呼び出しに例外が発生します。

全体コードはGistにて確認ください。

https://gist.github.com/ishisaka/9172101

第1回 第2回

コメントを残す