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

その1で、SELECTを実行しても値が取れないと書いてしまったのですが、SQLiteStatementクラスにインデクサがあるのを見落としていまして(だからソース読め)、このインデクサを使えば普通にカラムの値を取れます。

以下のような感じになります。

namespace SqlitePclSample
{
    using System;
    using SQLitePCL;

    /// <summary>
    /// SQLitePCLのサンプル
    /// </summary>
    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)
                    {
                        // Statementにインデクサがあるから、それで列のデータを取得するよ。
                        var id = (long)stmSelect[0];
                        var name = (string)stmSelect[1];
                        Console.WriteLine(id + ":" + name);
                    }
                }
                while (result == SQLiteResult.ROW);
                stmSelect.Dispose();
            }

            Console.ReadLine();
        }

        #endregion
    }
}

インデクサはObject型なのでキャストでがんばる感じです。(まぁODBCとか何とかではry)

ということで、がんばれそうなので、皆さん使ってみましょう!。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください