techbank.jp コミュニティ

     あれ?どうやるんだっけ?を解決する

坊やがゆくtech

【.NET】ゼロから5分でつくれるデータベースプログラミング【SQLite】

※ただしVisualStudioはインストール済み

ちょっとしたサンプルを作りたいときにデータベースエンジンを用意しないで済むので手軽です。
さらにオンメモリに展開するのでSQLiteファイルのパスを気にする必要もありません。
(その代わり揮発性ですが^^;)

サンプル作成手順:

  1. System.Data.SQLiteのサイトからインストーラをダウンロード
  2. インストール
  3. VisualStudioで新規コンソールアプリケーションを作成(デフォルトで可)
  4. インストール先のbinにあるdllを参照に追加
  5. System.Transactionsを参照に追加

こんな感じで更新や参照を行えます。

using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.SQLite;
using System.Transactions;

namespace ConsoleApplication1
{
  class Program
  {
      static void Main(string[] args)
      {
          using (TransactionScope tran = new TransactionScope())
          using (SQLiteConnection cnn = new SQLiteConnection("Data Source=:memory:"))
          {
              cnn.Open();

              using (SQLiteCommand cmd = cnn.CreateCommand())
              {
                  cmd.CommandText = "CREATE TABLE EMPLOYEES (ID INTEGER PRIMARY KEY, NAME NVARCHAR(256))";
                  cmd.ExecuteNonQuery();

                  cmd.CommandText = "INSERT INTO EMPLOYEES (NAME) VALUES('HOGE')";
                  cmd.ExecuteNonQuery();

                  cmd.CommandText = "SELECT * FROM EMPLOYEES";
                  SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
                  DataSet ds = new DataSet();
                  adapter.Fill(ds);
                  foreach (DataRow row in ds.Tables[0].Rows)
                  {
                      Console.WriteLine(String.Format("ID = {0}, NAME = {1}", row["ID"], row["NAME"])); // ID = 1, NAME = HOGE
                  }
              }
              tran.Complete();
          }
          Console.ReadKey();
      }
  }
}

参考:
C#からSQLiteを使ってみた

コメント

 

HIRO 発言:

おぉSQLiteですね。

次のネタリクエストしてもいいでしょうか?

できればTransactionScopeについて解説いただきたいなぁと。

個人的に勉強したいだけなんですが...よろしくお願いいたします。

11月 14, 2009 7:36 午前
 

けろ-みお 発言:

SQLite、手軽でいいですね。

特に、Source=:memory ってところが最高です!

11月 14, 2009 12:57 午後
 

yoshih529 発言:

にゃんぱぱです。

SQLiteは.NETからオンメモリーで扱えるのですね。

参考になりました。

11月 14, 2009 10:09 午後
 

gsf_zero1 発言:

こんばんわ。初コメです。

SQLiteいいですよね~。私もよく使います。

一度、小規模の案件に利用したのですが、快調でした。

SQLiteについては、私のブログでも一度記事かいてますので

よろしければご参照ください。(書いている事はほとんど同じなのですがw)

d.hatena.ne.jp/.../p1

>HIROさん

TransactionScopeについて、以前ちょこちょこ書いた記事がありますので、よろしければどうぞ。(解説にはなっていないかもしれませんが m(_ _)m)

d.hatena.ne.jp/.../searchdiary

11月 14, 2009 11:13 午後
 

けろ-みお 発言:

このネタ見て気になったんですが、Source=:memory でも、TransactionScopeって効いてるんでしょうか?

恐らく、TransactionScopeってデータベースのConnection単位で紐づけられるので、SQLiteのSource=:memory でもちゃんとトランザクションの単位としてくくられるんでしょうね。

ただ、TransactionScopeをネストしたり、分離レベルを設定した場合はどうなるんでしょうかね。

興味あるので実験して頂けると有難いです。

11月 15, 2009 12:25 午前
 

HIRO 発言:

gsf_zero1さん情報ありがとうございます。

参考にさせて頂きます。

けろさん

>ただ、TransactionScopeをネストしたり、分離レベルを設定した場合はどうなるんでしょうかね。

自分も興味あります。

ということで、どなたか是非情報お待ちしております。

11月 15, 2009 12:49 午前
 

PoohKid 発言:

>HIROさん

TransactionScopeなんですが

「usingで囲って使用する」

くらいしか知識無いですよ私><

>にゃんぱぱさん

SQLiteのオンメモリーに関してはPythonのサンプルで知りました。

SQLite自体の特徴のようですね。

>gsf_zero1さん

FirefoxもSQLiteですからね、パッケージなどと親和性が高いのかもしれません。

>けろ-みおさん

:memory:でもTransactionScopeは効いてますよ♪

次のエントリでTransactionScopeを使いますw

でもネストや分離レベルまでは><

ちなみにネストって普通のトランザクションのネストと違うんでしょうかね?

d.hatena.ne.jp/.../p2

トランザクションのネストに関しては昔こんなの書きました。

11月 16, 2009 1:58 午前

コメントを残す

(必須)  
(オプション)
(必須)  
techbank.jp