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にて確認ください。
SQLitePCL_Public.cs
GitHub Gist: instantly share code, notes, and snippets.
コメント