【C#】SQLite用のアクセスクラスを部品化しました!

プログラミング入門
この記事は約6分で読めます。

SQLite はコンパクト且つ高速で、標準的なSQLに対応した使い勝手の良いデータベースです。

複数のパソコンから同時アクセスは出来ませんが、1台のPCの中で使うには十分すぎるほどの性能を誇っています。

こんなに手軽で便利なSQLiteですが、C#から使おうとすると色々と手順が必要になります。

というのは、Oracle、SQLServer、MySQL、PostgreSQLなどの本格的なリレーショナルデータベースへの接続と、全く同じ手順が必要だからです。

DIYプログラミングとしては、「そんなところまで一から作りたくない」というのが本音ですよね。

SQLiteをよりサクッとつかえるようにするために、一通りの機能をクラスにまとめましたので、今回はそれについて解説したいと思います。

準備

このクラスを使うには、はじめにSQLite関連のライブラリを NuGet から入手して、プロジェクトにインストールしなければなりません。

簡単に説明すると Visual Studio のメニューから「ツール」⇒「NuGetパッケージマネージャ」⇒「ソリューションのNuGetパッケージの管理」に移動し、「sqlite」と言うキーワードで検索します。

懸隔結果の中に「Microsoft.Data.Sqlite.Core」が表示されると思いますので、これをインストールしてく下さい。

NuGetからの、より具体的なSQLiteのインストール方法は、こちら の記事に記載しています。

また、Nugetが初めての方は、こちら の記事もご一読下さい。

使い方

基本的に、こちらの記事に記載しているサンプルを、少し使い勝手を良くして1つのクラスに詰め込んだものになります。

ネームスペースは CommonClass、クラス名は SQLiteUtil にしています。

このまま使うのであれば、次の参照設定を先頭に記述して下さい。

では、実際にSQLを実行するサンプルソースを紹介します。

たとえば、商品マスターを全件読み込むのであれば、次の様に記述します。

1行目はインスタンスの生成ですが、引数に SQLiteのファイル名を指定しています。

2行目はSQLを実行して、結果をDataTableで受け取るメソッドです。

SQLiteに限らずデータベースからデータを受け取る場合はDataTableと相性がいいので、結果をDataTableで返すようにしました。

3行目はDataTableの内容を表示するため、DataViewViewにセットしています。

リファレンス

ネームスペースCommonClass
クラス名CsvUtil
機能SQLiteのデータベースファイルを作成します。
既に存在する場合、中身は削除されます。
メソッド名CreateDatabase()
戻り値の型なし
機能引数で指定したSQLを実行します。
メソッド名ExecuteNoneQuery(string sqls)
戻り値の型なし
機能複数のSQLを、トランザクション付きで実行します。
メソッド名ExecuteNoneQueryWithTransaction(string[] sqls)
戻り値の型なし
機能SQLを実行し、結果をobject で返します。
SQLは必ず答えを1つだけ返すように記述する必要があります。
メソッド名ExecuteScalar(string sql)
戻り値の型object
機能問い合わせ文を実行し、結果をDataTable形式で返します。
メソッド名ExecuteReader(string sql)
戻り値の型DataTable
機能問い合わせ用のSQLを実行し、結果をDataTable形式で返します。
内部でSQLiteDataAdapterというクラスを使っているのがDataReaderとの違いです。
メソッド名GetData(string sql)
戻り値の型DataTable
機能引数で指定したDataTableの内容で、指定したテーブルを更新します。
レコードの挿入、更新、削除が出来ますが、テーブルが存在しない場合はエラーになります。
メソッド名SetData(string tableName, DataTable dt)
戻り値の型DataTable
引数で渡されたDataTableをそのまま返しています。
機能指定したテーブルのカラム名を文字列配列で返します。
メソッド名GetColumnNames(string tableName)
戻り値の型string[]
機能指定したテーブルのカラム情報をDataTableで返します。
DataTableに返されたカラムと内容は次の通りです。
“cid” 0から始まる連番
“name” カラム名
“type” カラムのデータ型
“notnull” NULLが許可されていないカラムは1
“dflt_value” カラムの初期値
“pk” プライマリキーに設定されている場合は1
メソッド名GetColumnInfo(string tableName)
戻り値の型DataTable
機能現在登録されているテーブルとビューを文字列配列で返します。
メソッド名GetTableList()
戻り値の型string[]
機能指定したテーブルが存在すれば true 存在しなければ false を返します。
メソッド名Exists(string tableName)
戻り値の型bool
機能指定したテーブルが存在すれば削除します。
メソッド名DropTable(string tableName)
戻り値の型なし
機能レコードやテーブルの削除で使われなくなった領域を解放します。
メソッド名Vacuum()
戻り値の型bool
機能テーブルを作成します。
カラム名を指定する方法と、DataTableの中身を解析してテーブルを作成する方法があります。
カラム名、プライマリキーはカンマ区切りで指定して下さい。

例:CreateTable(“testdb”,”item1 integer,item2 real,item3 text”,”item1,item2) 
メソッド名CreateTable(string tableName, string fieldList, string primaryKeyList = “”)
戻り値の型なし
機能指定したテーブルに格納された値から、カラム名とデータタイプの一覧を作成します。
メソッド名CreateFieldList(DataTable dt)
戻り値の型string[]

ソースコード

以下が全体のソースコードになります。

まとめ

今回は、SQLite を簡単に使うために作ったクラスについて、備わっているメソッドの仕様とソースコード全体を掲載しました。

一通りの事は出来ますので、そのままコピペしてお使い頂けますが、あくまでも簡易版です。

ご自身で必要な機能を追加したり、変更してお使いください。

タイトルとURLをコピーしました