【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も同じ要領で実装できるので、試してみては。