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で公開しています。

コメント