New open source Portable Class Library for SQLite | MS OpenTech.
Microsoft Open TechからOSSとして、SQLite用のポータブルクラスライブラリが公開されましたので使って見ました。
PCLとは言っても現状は.NET Fx 4.5, Windows 8ストアアプリ, Windows Phone 8用で、.NETは32ビットアプリケーションのみです。ただXamalinが絡んでいるようなのでAndroidとかでも動くようになるかもしれませんね。
使い方ですが、ライブラリ自体はNuGetからインストールします。インストールするとReadmeが表示されるので、そこの指示に従ってプラットフォーム向けのSQLiteのライブラリをSQLiteのサイトからダウンロードし、指示通りに配置します。
Windowsのアプリ向けには、ダウンロードしたZIPファイルからファイルを解凍して、それらのファイルをプロジェクトのフォルダにコピー、VSでビルド時にターゲットのフォルダにコピーされるように設定します。
さて、このライブラリですが、ADO.NETのDataProviderではありません。ほぼ忠実にC言語ベースのSQLite APIをラップした物なので、普段慣れているADO.NETでのデーターアクセスのコードは書けません。Entity Frameworkも無し、Linqも無し。
なので、CのAPIをご存じならおなじみの、接続を作る、prepareでステートメントを作る、stepする、結果を確認するという手順です。
コード的にはだいたいこんな様子。
namespace SqlitePclSample { using System; using SQLitePCL; ////// SQLitePCLのサンプル /// internal class Program { #region Methods private static void Main(string[] args) { using (var con = new SQLiteConnection("Test.DB")) { // CREATE TABLE SQLiteResult result; var stmCreateTable = con.Prepare("CREATE TABLE Test (ID INTEGER, Name TEXT)"); int loop = 0; result = stmCreateTable.Step(); Console.WriteLine(result.ToString()); stmCreateTable.Dispose(); // INSERT var stmInsert = con.Prepare("INSERT INTO Test (ID, Name) VALUES(1, 'Tadahiro Ishisaka')"); result = stmInsert.Step(); Console.WriteLine(result.ToString()); stmInsert.Dispose(); // SELECT var stmSelect = con.Prepare("SELECT ID, Name FROM Test"); stmSelect.Reset(); do { result = stmSelect.Step(); if (result == SQLiteResult.ROW) { // どうすればいいの? } } while (result == SQLiteResult.ROW); stmSelect.Dispose(); } Console.ReadLine(); } #endregion } }
そうです。SELECT文自体は実行できる物の、結果から値を取る手段がまだ実装されていません!APIでのsqlite3_column_(型名)関数に当たる物が使える形で実装されていないんですよ。(その2参照)
ということで、がっかり感が否めませんが、基本的なところは出来ていそうなので、生暖かく開発を見守るなり、CodePlexでForkしてPullRequestを投げつけるなりしてみるとよろしいんじゃないでしょうか。
とりあえず現状は使い物に成らないと思うので。
私が見落としていただけだったみたいなので、見落としていた内容はその2に続く。
いらないとは思いますけど、ソースはgistで公開しています。
コメント