VisualStudio2019でSQLiteを利用する

NuGetパッケージのインストールからSQLiteを利用したい場合は、こちらのページをご参照ください。

DLLをSQLite.orgからダウンロードして利用したい場合は、こちらのページ(このページの内容を加筆修正しています)をご参照ください。

このページでは、Visual Studio 2019にてスタンドアロンで動作可能なWindowsアプリ(インストール等の作業が不要)でSQLiteを利用するためにあれこれ必要な点をまとめています。

すでにSQLiteのDBの準備が出来ている方は、下部の「参照の設定」からご覧になってください。

SQLiteとは

SQLiteはフリーで利用でき、様々なプラットフォームで利用でき、1つのデータベースを1つのファイルとして扱えるため、不要になれば削除すればよく、サーバーレスで利用できるなどの特徴があります。

GUIを利用したデータベースの作成

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の参照設定

必要となる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]をクリックします。

64bitアプリを作成しようとする場合の注意事項

メニューの[プロジェクト]→[***のプロパティ]を開きます。
※***にはプロフェクト名が入ります

プロパティ画面左部の”ビルド”を選択し、[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  ※参照設定に利用したダウンロード一式に入っています
を配置してください。

※デバッグ時にも必要ですので、お忘れなく!!

以上です。

投稿日:2020年1月24日 更新日:

執筆者:

このサイトの管理者について

1980年代生まれ
石川県在住

メーカー2社経験後に退社

1年程度自由に在職中はできなかったことにチャレンジ

その後コロナの影響でなかなか仕事が見つかりませんでしたが、無事就職

現在はシステム会社に勤務中

PAGE TOP