使用するSQLiteライブラリは System.Data.SQLite
これは、Complete ADO.NET 2.0 Implementation ということだそうですが、
なにせ、ADO.NETとか使ったこと無いんで案の定ドキュメントあっても引っかかるところがあった...

ので、自分用備忘録として、使い方を載せておきます。

using System;
using System.IO;
using System.Data;
using System.Data.SQLite; // 名前空間のimport

class SampleClass
{
  public static void main(string[] args)
  {
    // コマンドライン引数の1つ目はデータベースファイルへのパスとする。
    if ( args.Count != 1 || !File.Exists(args[0]) ) {
      Console.WriteLine("usage: <exec> <dbfile>");
      return;
    }

    // データベースコネクションを設定
    SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder();
    builder.DataSource = args[0];
    SQLiteConnection conn = new SQLiteConnection(builder.ConnectionString);
    // 接続
    conn.Open();

    // Prepared Statementを作成
    SQLiteCommand comm1 = conn.CreateCommand();
    comm1.CommandText = "INSERT INTO TBL_HOGE VALUES (?, ?)";
    // Prepare() は"Does nothing"なので呼ばなくていい

    // パラメタを設定
    SQLiteParameter param = comm1.CreateParameter();    
    param.Value = "Hoge";
    comm1.Parameters.Add(param);
    param = comm1.CreateParameter();
    param.Value = 32;
    comm1.Parameters.Add(param);
    // statement を使いまわす場合は先に Parameters.Clear() しておく

    // SELECT以外の実行
    // INSERTした行数やらUPDATEした行数やらが返ってくるので
    // 必要なら使う。
    comm1.ExecuteNonQuery();

    // 今度はSELECT
    SQLiteCommand comm2 = conn.CreateCommand();
    comm2.CommandText = "SELECT * FROM TBL_HOGE";

    using ( SQLiteDataReader r = comm2.ExecuteReader() ) {
      // r.FieldCount --- 現在のResultSetのカラム数
      // r.HasRows --- SELECT結果が1行でもあれば true
      // r.Read() --- 次のResultSetを<b>読み込む</b>
      // r.NextResult() --- 次のResultSetへ<b>移動する</b>。(移動するだけで読み込んではくれないっぽい)
 
      // 初期rowは最初の結果の1つ前(他の多数のDBライブラリと一緒)
      int ridx = 0;
      while ( r.Read() ) {
        Console.WriteLine("["+ridx+"]");
        ++ridx;
        for ( int i = 0; i < r.FieldCount; ++i ) { // columnのindexは0 origin
          Console.WriteLine("  " + r.GetName(i) + " --- " + r.Item[i]);
          // もしくはr.Get***() メソッドで型指定で取ってくる。
        }
      }
    }

    comm2.Dispose();
    comm1.Dispose();
    conn.Dispose();
  }
}

こんな感じかな。

ちなみに、Parameterの型をちゃんと指定しないとまずい場合は、

SQLiteParameter param = comm.CreateParameter();
param.DbType = System.Data.DbType.Int64
param.Value = 0L;
comm.Paramters.Add(param);

とかやる。 (2008-03-18 基本的に常に指定しなきゃいけないみたい..)

また、SQLiteは基本的に変更即commitなので、Transactionは明示的に

SQLiteTransaction tx = conn.BeginTransaction();
// 何か変更
tx.Commit(); // または tx.Rollback();

とかやる必要あり。

もうひとつおまけ。
SELECT COUNT(*) FROM TABLE など、必ず1列目1行目が取れるような場合には

if ( (Int64)comm.ExecuteScalar() > 0 ) {
  // hogehoge
}

とかできる。

  • 2008-03-18 2:00
    • ParametersのAdd()の引数とExecuteScalar()の戻り値のキャストを修正~ <(_ _)>
  • 2008-03-27 1:10
    • さらに修正。パラメタ変数はちゃんとSQLiteCommand::CreateParamter() を使って作成しなきゃいけないみたい。
  • 2008-04-28
    • ちょっとフォーマットを変更

トラックバック(1)

トラックバックURL: http://floralcompany.jp/mt/mt-tb.cgi/182

前回 に引き続き、もういっちょソートネタ... 続きを読む

コメントする

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic