Top > SQLite.NET

System.Data.SQLiteについて Edit

旧サイト:http://sqlite.phxsoftware.com/
上記サイトは更新停止しており、下記サイトが開発を引き継いだようです。(2011-07-03現在)
新サイト:System.Data.SQLite

日本語(UTF-8)テーブル名、カラム名も普通に使えます。
UPDATE、INSERTを連続で行う場合はBeginTransactionでトランザクションを使わないと遅いので注意。

chmヘルプファイルがここからダウンロードできる
chmの中身が表示されない場合は、エクスプローラからCHMファイルのプロパティを表示させて「ブロックを解除」

パッケージの選び方 Edit

ダウンロードページには多数のパッケージがあり、使用目的にあったパッケージをダウンロードする必要があります。

Precompiled Statically-Linked Binariesのbundleでない方を選べば、一番問題が少ないと思います。
SetupはVisual Studioのdesign-tmeを使う開発者のマシンでだけ必要です。

The setup packages are intended to be installed only on developer machines and then only when the design-time components for Visual Studio are required.

(setupパッケージは開発者のマシンにだけ、またVisual Studioのdesign-timeコンポーネントが必要なときだけインストールすることを想定している)

The binary packages are intended to be used by developers in order to obtain the assembly binaries necessary for development and deployment of their applications onto customer machines via XCOPY deployment.
(binaryパッケージは、開発者とカスタマーのマシンにDLLコピーでデプロイすることを想定している)

All the "bundle" packages contain the "System.Data.SQLite.dll" mixed-mode assembly. These packages should only be used in cases where the assembly binary must be deployed to the Global Assembly Cache for some reason (e.g. to support some legacy application on customer machines).
(bundleパッケージはmixedモードのSystem.Data.SQLite.dllを含んでいる。bundleパッケージは、なんらかの理由でGlobal Assembly Cacheにデプリしなければならないときだけ使うべきである)

All the "static" packages contain either native or mixed-mode assembly binaries linked statically to the appropriate version of the Visual C++ runtime. Typically, these packages are used in cases where customer machines may not have the necessary version of the Visual C++ runtime installed and it cannot be installed due to limited privileges.

(staticパッケージはVisual C++ランタイムにスタティックリンクされたネイティブまたmixedモードのアセンブリを含んでいる。これらのパッケージは、典型的には、カスタマーのマシンに必要なVisual C++ランタイムがインストールされておらず、権限によりインストールできない場合に使われる)

DLLのデプロイの仕方 Edit

GACは推奨されておらず、DLLをアプリと同じフォルダにコピーして使うことが推奨されています。

x86とx64両方に対応させるためには、bundleでないパッケージのx86とx64両方をダウンロードして下記のフォルダ構成にすれば、適切なCPUのSQLite.Interop.dllが読み込まれるようです(native library pre-loading機能)。

<bin>\App.exe (optional, managed-only application executable assembly)
<bin>\App.dll (optional, managed-only application library assembly)
<bin>\System.Data.SQLite.dll (required, managed-only core assembly)
<bin>\System.Data.SQLite.Linq.dll (optional, managed-only LINQ assembly)
<bin>\x86\SQLite.Interop.dll (required, x86 native interop assembly)
<bin>\x64\SQLite.Interop.dll (required, x64 native interop assembly)

最初のサンプル Edit

準備:必要なDLLをすべてローカルにコピーし、System.Data.SQLite.dllを参照に追加する。

testdb.dbというファイルを作ってインサートするサンプル。
プレースホルダにはSQL Serverと同じ「@」も使える。

using System.Data.SQLite;
SQLiteConnection conn = new SQLiteConnection();
conn.ConnectionString = "Data Source=testdb.db;Version=3;";
conn.Open();
SQLiteCommand command = conn.CreateCommand();
command.CommandText = "CREATE TABLE Test (id integer primary key AUTOINCREMENT, text varchar(100))";
command.ExecuteNonQuery();

command = conn.CreateCommand();
command.CommandText = "INSERT INTO Test (text) VALUES (@1)";
SQLiteParameter parameter = command.CreateParameter();
parameter.ParameterName = "@1";
parameter.Value = "あいうえお";
command.Parameters.Add(parameter);
command.ExecuteNonQuery();

接続文字列(ConnectionString) Edit

http://www.connectionstrings.com/sqlite
下記のような設定ができる。

  • 暗号化
  • 圧縮
  • DateTimeのフォーマットにTicksを指定
  • オンメモリデータベース
  • UTF-16の使用

データ型 Edit

boolが使える。.NET上のtrue/false1とSQLiteの1/0が相互に変換される。
DATETIMEの形式のデフォルトはISO8601("yyyy-MM-dd HH:mm:ss.fffffff")
(DATETIMEの形式の不一致でUpdateできないなどトラブルになること多し)
INTはInt32でINTEGERはINT64なことに注意。

使えるデータ型の一覧
DataType Mappings - System.Data.SQLite
http://sqlite.phxsoftware.com/forums/t/31.aspx

ソースのSQLiteConvert.csにこの変換規則が書いてある。

SQLiteの型名.NETの型名
COUNTERDbType.Int64
AUTOINCREMENTDbType.Int64
IDENTITYDbType.Int64
LONGDbType.Int64
TINYINTDbType.Byte
INTEGERDbType.Int64
INTDbType.Int32
VARCHARDbType.String
NVARCHARDbType.String
CHARDbType.String
NCHARDbType.String
TEXTDbType.String
NTEXTDbType.String
STRINGDbType.String
DOUBLEDbType.Double
FLOATDbType.Double
REALDbType.Single
BITDbType.Boolean
YESNODbType.Boolean
LOGICALDbType.Boolean
BOOLDbType.Boolean
NUMERICDbType.Decimal
DECIMALDbType.Decimal
MONEYDbType.Decimal
CURRENCYDbType.Decimal
TIMEDbType.DateTime
DATEDbType.DateTime
TIMESTAMPDbType.DateTime
DATETIMEDbType.DateTime
BLOBDbType.Binary
BINARYDbType.Binary
VARBINARYDbType.Binary
IMAGEDbType.Binary
GENERALDbType.Binary
OLEOBJECTDbType.Binary
GUIDDbType.Guid
UNIQUEIDENTIFIERDbType.Guid
MEMODbType.String
NOTEDbType.String
LONGTEXTDbType.String
LONGCHARDbType.String
SMALLINTDbType.Int16
BIGINTDbType.Int64
LONGVARCHARDbType.String
SMALLDATEDbType.DateTime
SMALLDATETIMEDbType.DateTime

サンプルコード Edit

http://sqlite.phxsoftware.com/forums/t/76.aspx

  1. Creating a new SQLite database file
  2. Enabling NTFS file compression on a database file
  3. Enabling NTFS encrypted file system support on a database file (obsolete, see #5)
  4. Writing parameterized queries
  5. Encrypting, decrypting and attaching to encrypted databases
  6. Writing high performance inserts/updates
  7. User-defined scalar, aggregate and collation functions
  8. Attaching multiple databases to a connection (aka "how to read and write simultaneously")
  9. Reclaiming unused space in a database file (vacuum)
 10. Retrieving and interpreting schema information

CommandBuilderが作るUpdateCommandにはバグがある Edit

Concurrency Violation on update - can you help? - System.Data.SQLite
http://sqlite.phxsoftware.com/forums/t/1607.aspx

DataTableを継承してDataGridViewに表示させるサンプル Edit

DataTableを継承してDataGridViewに表示させるサンプル

EmployeeクラスのArrayListをデータソースにしたフォーム形式のサンプル Edit

EmployeeクラスのArrayListをデータソースにしたフォーム形式のサンプル



URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

Attach file: fileSQLiteSample1.zip.tgz 904 download [Information]

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes