2016年1月31日日曜日

[SQLite]DB作成および接続

◆DBを作成および接続
using System;
using System.Data.SQLite;

namespace SampleCode
{
    class Program
    {
        static void Main(string[] args)
        {
            string filepath = "sample.db";

            try
            {
                using (SQLiteConnection con = new SQLiteConnection("Data Source=" + filepath))
                {
                    con.Open();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

▪️Data Source
オープンしたいデータベースのパスを指定します。
必須項目はこちらのみですが、それ以外に設定できるものは、以下のとおり。

情報は、System.Data.SQLiteのドキュメントです。
SQLiteConnection Classに記載されています。

あらためて説明(めぼしいとこだけ抜粋)
▪️Data Source
file名、:memory:、URI(ver3.7.7以降)に対応している。

:memory: は、ファイルを生成せずにon memoryで処理したい場合に指定。
UNCのパスを使うときは、先頭のスラッシュは2つずつ記載しないといけないそうな。
例としてこんなのが書いてある
(e.g. "\\Network\Share\test.db" would become "\\\\Network\Share\test.db")

この項目だけ必須。
あとは、任意。

Pragmaの設定とかをSQLiteConnectionで設定できます。

--------------------------------------------------------------------------------------------------
▪️Version
バージョン番号。説明は3としか書いてないです・・・
あるサイトにバージョンは3で固定と言った内容をみかけたのですが、どうなんだろう。
Default: 3

--------------------------------------------------------------------------------------------------
▪️UseUTF16Encoding
True→EncodeにUTF16が使われる
False→EncodeにUTF8が使われる
Defaul:False

--------------------------------------------------------------------------------------------------
▪️Cache Size
メモリに保持できる最大ページ数を指定。
保持できる最大メモリ数は、Cache Size x Page Size(bytes)となる
Default:2000

--------------------------------------------------------------------------------------------------
▪️Page Size
ページサイズの指定
Default:1024(byte)

※(メモ)データベースのデータを管理するユニットのサイズ、
データが多くあるのに、ページが小さいと複数のページを読み込まないといけなくなる
逆にたいしたデータがないのに大きいページを設定すると、無駄な読み込みが発生する
SQL Serverあたりは8kbとなっているみたい。
ちなみに、2の累乗の値を設定する必要があるそうな。

--------------------------------------------------------------------------------------------------
▪️Foreign Keys
ver3.6.19から外部参照が使えるようになったのですが
互換性を考慮してか、デフォルトではOFFとなっています。
そのため、この項目をTrueにして接続しないと、外部参照のエラーは発生しません。
(外部参照を設定してもなんでもうけつけてしまう)
Default:false

--------------------------------------------------------------------------------------------------
▪️Password
パスワードを設定することができる。
SQLiteConnectionクラスのChangePasswordメソッドで変更できる

--------------------------------------------------------------------------------------------------
▪️Default IsolationLevel
トランザクション分離レベル
SQLiteConnectionの項目には特に説明はないけど
BeginTransactionの引数で使用できるIsolationLevelの説明だと
SerializableとReadCommittedのみ対応しているみたい。
Default:Serializable

--------------------------------------------------------------------------------------------------
▪️Default Timeout
コマンド実行タイムアウト時間
Default:30[s]

--------------------------------------------------------------------------------------------------
▪️Journal Mode
データの変更時に、一時的に生成されるJournalファイルのモードを設定
Delete, Persist, Off, Truncate, Memory, Walから選べる
Deleteは、コミット後ジャーナルファイルが削除される
Truncate は、削除するかわりにジャーナルサイズを0にする(削除するより早い)
Persistは、コミット後ジャーナルファイルのヘッダーを0に書き換えるだけ(Trancateするより早い)
OFFは、ジャーナルを使わない。ロールバックは使えなくなります。

Memoryは、ジャーナルをファイルではなくメモリ上で行う。
Walは、ログを吐き出した時点でデータファイルに書き込みを行う
Default:Delete

--------------------------------------------------------------------------------------------------
▪️Synchronous
同期の設定。
OFF、Normal、Fullとの3つのモードあり。
OFFの場合、書き込みが完了するか待たずに処理を再開。
NormalとFullは、ディスクへのデータ書き込みを待ってから次の処理に移る。
Fullは、完全に待つが、NormalはFullほどまたない。
Default:Full

※(メモ)下記サイトのPRAGMA default_synchronousの説明がわかりやすかったです
http://net-newbie.com/sqlite/lang.html

--------------------------------------------------------------------------------------------------
▪️Pooling
コネクションプーリング
Default:False

--------------------------------------------------------------------------------------------------
▪️Max Pool Size
コネクションプーリングの最大数
Default:100

0 件のコメント:

コメントを投稿