【C#からSQLite接続】Database接続のクラスを作成したので管理が容易になった
DB-SQLite & C#
広く活用されているデータベースといえば、SQLiteですね。
SQLiteをC#から接続する方法と、DBクラスを作成しましたので、
こんな感じにすると管理が容易になるよっていう話です。
SQLite-GUI
DB管理者はGUI管理だと楽ですよね。そこで、今回は、
を使用します。
使い方は、他のサイトへ。
C#-Nugetパッケージ管理からインストール
では、C#でSQLiteに接続する方法です。
今回は、C#のWindowsForm開発の.NetFramework4.8での場合でご紹介します。
4.8以前のVer.でもいけると思います。
プロジェクトを作成したら、Nugetパッケージ管理を開いて、参照タブにして、
「system.data.sqlite」と検索してみましょう。
検索結果から「System.Data.SQLite」をインストールします。

インストールできたら今回の要である、DB制御クラスを作成します。
DB制御クラス作成
プロジェクト名選択して右クリックメニュー⇒追加⇒新しい項目で
新規にクラスファイルを作成します。

クラスを選択してクラス名を任意で決めて追加します。

クラスファイルを開いて、コードを書いていきます。
DB_クラス
クラス内容は下記の通りになります。
参照追加でusing System.Data.SQLite;を追加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
using System.Data.SQLite; namespace SQLite_SQL { class Dbctl { private readonly SQLiteConnection conn; public Dbctl(string dbname) { string conn_str = "Data Source=" + dbname + ";"; conn = new SQLiteConnection(conn_str); conn.Open(); } public void Close() { conn.Close(); conn.Dispose(); } public void ExecuteNonQuery(string sql) { SQLiteCommand sqlCom = new SQLiteCommand(sql, conn); sqlCom.ExecuteNonQuery(); } public SQLiteDataAdapter ExecuteQueryAdapter(string sql) { SQLiteDataAdapter Adapter = new SQLiteDataAdapter(sql, conn); return Adapter; } public SQLiteDataReader ExecuteQueryReader(string sql) { SQLiteCommand sqlCom = new SQLiteCommand(sql, conn); SQLiteDataReader reader = sqlCom.ExecuteReader(); return reader; } } } |
Open()、Close()のメソッドがあり、その他には、
ExecuteNonQueryは、Insert文、Create文、Delete文、Alter文、などのクエリで結果を返さないSQL文などを実行するときに使用します。コード見ての通り、returnがないで返り値がないです。
SQLiteDataAdapterは、select文などでAdapterでまとめてデータを取得するときに使用します。データセットに入れてデータテーブルからデータグリッドにデータを表示させるときなどに使います。returnがありデータを返します。
SQLiteDataReaderは、select文などでデータを取得してそのデータを1つずつや1行ずつ編集取得していくことができて、データ分析するときなどはこちらを主に使います。こちらもreturnがありデータを返します。
詳しくないので、詳細はググって下さい。
文字列にしている”Data Source=~~~~”は、扱うDBの種類によって変わります。
それぞれのDB接続子をご確認下さい。
今回は、SQLiteでの例です。
Form
それでは、画面設計とクリックイベントなどのソースコードを載せていきます。
今回は、ボタンを3つ設置、データグリッド設置、ラベル設置して、下記の処理を書いていきます。
- Select文実行でテーブル内容をデータグリッドに表示させる。
- Insert文実行でレコード追加させる。
- Select文実行でテーブル内のレコード数(件数)を取得させる。
画面設計は下記の図のようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
using System; using System.Data; using System.Data.SQLite; using System.Windows.Forms; namespace SQLite_SQL { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //データベース接続情報 private const string DATABASE_NAME = "SAMPLE.db"; //---Table_create---------- // CREATE TABLE "TEST" ( // "no" INTEGER, // "name" TEXT, // "remarks" TEXT, // "flag1" INTEGER, // PRIMARY KEY("no") // ) //------------------------- /// <summary> /// Form起動時処理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { SqliteTableSelect_class(); } /// <summary> /// Select_View /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { SqliteTableSelect_class(); } /// <summary> /// Select_View /// </summary> public void SqliteTableSelect_class() { //DB制御class Dbctl dbctl = new Dbctl(DATABASE_NAME); try { string strSQL = "SELECT * From TEST"; SQLiteDataAdapter Adapter = dbctl.ExecuteQueryAdapter(strSQL); DataSet Ds = new DataSet(); //データセットインスタンス作成 DataTable dt = new DataTable(); //データテーブルインスタンス作成 Adapter.Fill(dt); //データテーブルに代入 Ds.Tables.Add(dt); //データセットに追加 dataGridView1.DataSource = Ds.Tables[0]; //グリッドビューにデータ表示 } catch (Exception exception) { MessageBox.Show("DB_select_table_view:\n" + exception.Message, "Error"); } finally { dbctl.Close(); } } /// <summary> /// Insert /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { string cmd_str1 = "INSERT INTO TEST (name, remarks, flag1) VALUES('DDD1', 'memo4', 1)"; Sqlite_insert(cmd_str1); } /// <summary> /// Insert /// </summary> /// <param name="cmd_str"></param> public void Sqlite_insert(string cmd_str) { //DbctlClass Dbctl dbctl = new Dbctl(DATABASE_NAME); try { dbctl.ExecuteNonQuery(cmd_str); } catch (Exception e) { MessageBox.Show(e.Message); } finally { dbctl.Close(); } } /// <summary> /// Select_Count /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button3_Click(object sender, EventArgs e) { Sqlite_select(); } /// <summary> /// Select_Count /// </summary> public void Sqlite_select() { //DB制御class Dbctl dbctl = new Dbctl(DATABASE_NAME); try { string cmd_str = "SELECT Count(*) FROM TEST"; SQLiteDataReader reader = dbctl.ExecuteQueryReader(cmd_str); while (reader.Read()) { label1.Text = reader[0].ToString(); //全件数検索結果表示 } } catch (Exception e) { MessageBox.Show(e.Message); } finally { dbctl.Close(); } } } }け |
using System.Data.SQLite;を追加して、SQL実行するときにDbctl.csを呼び出して活用する方法をご紹介しました。
SQLiteを使用したプロジェクトにDbctl.csクラスファイルを追加すればいいだけなので、容易に展開でき、管理も楽で、コードもスッキリしてコードレビューする際も見やすい。
結果
今回のSQLiteではテーブル作成を下記の図のようなテーブル定義にしました。

create table文を載せておきます。
CREATE TABLE “TEST” (
“no” INTEGER,
“name” TEXT,
“remarks” TEXT,
“flag1” INTEGER,
PRIMARY KEY(“no”)
)
完成したプログラムを起動してテーブル内容がデータグリッドに表示されます。

select_countボタンをクリックすると3件と出てきます。
次にInsertボタンをクリックするとレコードが1つ追加されます。
Select_Viewボタンをクリック、Select_countボタンもクリックするとデータ内容と件数が表示されます。

他のデータベースでも同様な感じにクラスを作成して使い回せます。
OracleやPostgresQLでの例も記事にして書いてます。
ご参考に。
Oracleバージョン
PostgresQLバージョン
【C#&PostgreSQL接続】Database-controlクラス作成で管理容易