このページでは、Visual Studio 2019にてインストール等の作業が不要な実行ファイル配布型のWindowsアプリでSQLiteを利用するためにあれこれ必要な点をまとめています。
すでにSQLiteのDBの準備が出来ている方は、下部の「参照の設定」からご覧になってください。
NuGetパッケージのインストールからSQLiteを利用したい場合は、こちらのページをご参照ください。
このページの内容
SQLiteはフリーで利用でき、様々なプラットフォームで利用でき、1つのデータベースを1つのファイルとして扱えるため、不要になれば削除すればよく、サーバーレスで利用できるなどの特徴があります。
DB Browser for SQLiteのDownloadページから、各PC環境にあったものを取得し、インストールしてください。
左上の[New Database]から、保存先とファイル名を指定するとデータベースファイルの作成が完了します。
次にテーブルを作成する画面が開くので、テーブル名を入力し、各フィールドを追加していきます。
下図では、整数型のField1と文字列型のField2が含まれる”SAMPLE_TABLE”というテーブルを作成しています。
フィールドの型(Type)は
・INTEGER(整数)
・TEXT(文字列)
・BLOB(バイナリ)
・REAL(浮動小数点8バイト)
・NUMERIC(数値型)
で指定します。
フィールドの設定として
・NN:Nullを許容しない
・PK:Primary Key
・AI:Auto Increment(自動採番)
・U:Unique(重複を許容しない)
を指定することができます。
その他にもデフォルト値の設定などがGUI上で行うことができます。
※その他にもデータベースの中身確認、SQLの実行などがこのツール上でできます。
必要となるDLLをSQLiteのホームページからダウンロードしてきますが、今回利用したいDLLは、Download直下からはダウンロードできませんので、次のように進んでいってください。
ページ上部の[Download]をクリックし、
画面下部の“Precompiled Binaries for .NET”のリンク [download page]へ移動。
利用したい環境(FrameworkのVer、作成したいアプリのビット数)を探し、bundleの文字が含まれていないほうをダウンロードし、解凍しておきます。
※今回は64bit版の.Net Framework4.5.1を利用するので、sqlite-netFx451-binary-x64-2013-1.0.112.0 と書かれたリンクからダウンロードしています。
ダウンロードが完了したら、Visual Studioを起動しSQLiteを利用したいプロジェクトを開き、
メニューの[プロジェクト]→[参照の追加]を選択。
もしくはソリューションエクスプローラー内の”参照”を右クリックしてメニューを表示し、[参照の追加]を選択。
参照マネージャーが起動するので、ウィンドウ下部にある[参照]をクリックし、先ほどダウンロード&解凍したフォルダを開いて中にあるSystem.Data.SQLite.dllを選択します。
すると以下のようになるので、[OK]をクリックします。
メニューの[プロジェクト]→[※※※プロパティ]を開きます。 ※※※にはプロフェクト名が入ります
プロパティ画面左部の”ビルド”を選択し、[32ビットを選ぶ]に入っているチェックを外してください。
この変更をしないと “System.BadImageFormatException の~”といった例外エラーが発生します。
まずはヘッダ追加
using System.Data.SQLite;
・SELECT文を実行し、SQLDataReaderで受け取る場合
string DBFilePath = ""; //データベースファイルのパス
string sql;
string result = "";
SQLiteDataReader dataReader;
SQLiteConnection SQLiteCon = new SQLiteConnection("Data Source=" + DBFilePath + ";Version=3"); //DBにパスワード等が設定されている場合は、必要に応じて追記してください。
SQLiteCon.Open();
SQLiteCommand SQLiteCom = SQLiteCon.CreateCommand();
sql = "Select * From sample_table";
SQLiteCom.CommandText = sql;
dataReader = SQLiteCom.ExecuteReader();
if (dataReader.HasRows) //値が取得できているか確認する
{
while (dataReader.Read()) //DataReaderを開いて1行ずつ読み込み、読み取る行がなくなると終了する
{
//dataReaderの値を文字列として取り出す場合
result = dataReader[0].ToString(); //SQLで指定した1列目の値
result = dataReader["Field1"].ToString(); //フィールド名を指定して値を取得する
}
dataReader.Close(); //DataReaderを閉じる。
}
//終了処理
SQLiteCon.Close();
SQLiteCon.Dispose();
・INSERT文やUPDATE文などを実行する場合
string DBFilePath = ""; //データベースファイルのパス
string sql;
SQLiteConnection SQLiteCon = new SQLiteConnection("Data Source=" + DBFilePath + ";Version=3;"); //DBにパスワード等が設定されている場合は、必要に応じて追記してください。
SQLiteCon.Open();
SQLiteCommand SQLiteCom = SQLiteCon.CreateCommand();
SQLiteCom.Transaction = SQLiteCon.BeginTransaction();
sql = "Insert into sample_table (Field1,Field2) values (1,'1行目のサンプルデータ')"; //Field1に数値の1を、Field2に文字列を挿入
SQLiteCom.CommandText = sql;
SQLiteCom.ExecuteNonQuery();
SQLiteCom.Transaction.Commit();
SQLiteCom.Transaction = SQLiteCon.BeginTransaction();
sql = "Update sample_table Set Field2='1行目のサンプルデータの値を変更' Where Field1=1"; //Field1=1を更新
SQLiteCom.CommandText = sql;
SQLiteCom.ExecuteNonQuery();
SQLiteCom.Transaction.Commit();
//終了処理
SQLiteCon.Close();
SQLiteCon.Dispose();
デバッグやリリース後の各PCで稼働させる際には、同一フォルダ内に、
・ System.Data.SQLite.dll ※参照設定で設定したdllです(デバッグ/リリースフォルダに自動でコピーされているはず)
・ SQLite.Interop.dll ※参照設定に利用したダウンロード一式に入っています
を配置してください。
※デバッグ時にも必要ですので、お忘れなく!!
以上です。
更新
8/7 NuGetパッケージのインストールを利用する場合の説明ページへのリンクを追加