【SQLite】windowsFormsでSQLiteを使用してデータベース活用アプリを開発
NuGetパッケージ
まずは、SQLiteを使用するためNugetパッケージの管理から「SQLite」と検索して、
「System.Data.SQLite.Core」をインストールしよう。
インストールし終わったら、プロジェクトフォルダ配下に「packages」フォルダが作成されて、
その中にNuGetでインストールされたパッケージが入る。
画面設計
今回は、下記の図の通り、画面を作成してみました。
Database作成&テーブル作成&データ登録&データ取得
早速、ソースコードを載せます。
データベース作成、テーブル作成、データ登録、データ取得できるアプリを作成しました。
using System; using System.Data; using System.Data.SQLite; using System.Windows.Forms; namespace SQLite_Database { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //DB作成 private SQLiteConnection conn = new SQLiteConnection("Data Source = SQLite.db"); // 「●●.db」でデータベースファイルが作成される. 実行ファイルと同じフォルダ内に生成。 //private SQLiteConnection conn = new SQLiteConnection(@"Data Source = C:\work\SQLite.db"); // 「●●.db」でデータベースファイルが作成される. 絶対パスで置き場所指定もできる。 /// <summary> /// ボタンクリックイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button1_Click(object sender, EventArgs e) { try { //DBを開く conn.Open(); //SQL文作成 SQLiteCommand command = conn.CreateCommand(); //SQL文作成 テーブル作成 書き方は様々 //command.CommandText = "create table IF NOT EXISTS TEST (id, name, remarks)"; //全て文字列型で設定される. command.CommandText = "create table IF NOT EXISTS TEST (id integer PRIMARY KEY AUTOINCREMENT, name, remarks)"; //id カラム列をプライマリーキーに設定. //command.CommandText = "create table IF NOT EXISTS TEST (id integer PRIMARY KEY AUTOINCREMENT, name varchar(30), remarks varchar(200))"; //各カラムの型を設定しバイト容量を設定. //クエリ実行 command.ExecuteNonQuery(); textBox1.Text = "DB作成&テーブル作成完了."; } catch (Exception ex) { //エラーをテキストボックスに表示 textBox1.Text = ex.Message; } finally { //DB閉じる conn.Close(); } } /// <summary> /// レコード追加ボタンクリックイベント Insert文 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button2_Click(object sender, EventArgs e) { //データを用意 string name1 = "AAA"; string name2 = "BBB"; string name3 = "CCC"; string remarks1 = "hogehoge1"; string remarks2 = "hogehoge2"; string remarks3 = "hogehoge3"; try { //DBを開く conn.Open(); //SQL文作成 SQLiteCommand command = conn.CreateCommand(); //SQL文作成 テーブル作成 command.CommandText = "insert into TEST (name, remarks) values('" + name1 + "', '" + remarks1 + "')"; //クエリ実行 command.ExecuteNonQuery(); //SQL文作成 テーブル作成 command.CommandText = "insert into TEST (name, remarks) values('" + name2 + "', '" + remarks2 + "')"; //クエリ実行 command.ExecuteNonQuery(); //SQL文作成 テーブル作成 command.CommandText = "insert into TEST (name, remarks) values('" + name3 + "', '" + remarks3 + "')"; //クエリ実行 command.ExecuteNonQuery(); //結果表示 textBox2.Text = "データ登録完了."; } catch (Exception ex) { //エラーをテキストボックスに表示 textBox2.Text = ex.Message; } finally { //DB閉じる conn.Close(); } } /// <summary> /// データ取得ボタンクリックイベント SELECT文 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button3_Click(object sender, EventArgs e) { try { //DBを開く conn.Open(); //SQL文作成 SQLiteCommand command = conn.CreateCommand(); //SQL文作成 テーブル作成 command.CommandText = "select * from TEST"; //クエリ実行 //◆データを1レコードずつ取得していく場合 SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) { richTextBox1.Text += reader[0].ToString() + reader[1].ToString() + reader[2].ToString(); //引数index番号は、カラム順 [0]:id [1]:name [2]:remarks } //◆データを一括で取得してDataGridViewに表示する場合 SQLiteDataAdapter adapter = new SQLiteDataAdapter("select * from TEST", conn); DataSet Ds = new DataSet(); //データセットインスタンス作成 DataTable dt = new DataTable(); //データテーブルインスタンス作成 adapter.Fill(dt); //データテーブルに代入 Ds.Tables.Add(dt); //データセットに追加 dataGridView1.DataSource = Ds.Tables[0]; //グリッドビューにデータ表示 //結果表示 textBox3.Text = "データ取得完了."; } catch (Exception ex) { //エラーをテキストボックスに表示 textBox3.Text = ex.Message; } finally { //DB閉じる conn.Close(); } } } }
実行結果表示
ビルドして実行すると、下記のような結果が表示される。
カレントフォルダにDB作成
DBは、カレントディレクトリーに生成される。
DB置き場所指定
DBの置き場所を指定したい場合は、絶対パスで指定してあげればいい。
SQLiteConnection conn = new SQLiteConnection(@"Data Source = C:\work\SQLite.db");
まとめ
SQLiteは、簡単にデータベース構築できる。Androidアプリにもよく用いられている。
クライアントサーバーアプリケーションには使えない。。スタンドアロン向け(組み込み等)です。
他のOracleDB,H2DB,PostgresQLなどのDBも同じ要領で実装できるので、試してみては。