SQLite のテーブルにレコードを挿入するコードを紹介します。
SQLiteのテーブルにレコードを挿入するには、SQLのINSERT文を実行します。
下図のUIを作成します。ボタンとテキストボックスを配置します。今回は[button3]のみを利用します。
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
namespace SimpleSQLiteDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
SQLiteConnection con = new SQLiteConnection("Data Source=mydb.sqlite;Version=3;");
con.Open();
try {
string sql = "insert into products (id, code, name, price) values (1,'C-001','ぺんぎんケーキ', 380);";
sql += "insert into products (id, code, name, price) values (2,'C-002','らくだカステラ', 250);";
sql += "insert into products (id, code, name, price) values (3,'C-003','くじらキャンディ', 160);";
SQLiteCommand com = new SQLiteCommand(sql, con);
com.ExecuteNonQuery();
}
catch (SQLiteException exc) {
System.Diagnostics.Debug.WriteLine(exc.Message);
}
finally {
con.Close();
}
}
}
}
SQLiteConnectionオブジェクトを作成します。
SQLiteConnection con = new SQLiteConnection("Data Source=mydb.sqlite;Version=3;");
SQLiteConnectionオブジェクトのOpenメソッドを呼び出しデータベースを開きます。開いたデータベースは確実に閉じる動作とするためfinallyブロックでSQLiteConnectionオブジェクトのCloseメソッドを呼び出し、必ずデータベースが閉じられる動作とします。
con.Open();
try {
string sql = "insert into products (id, code, name, price) values (1,'C-001','ぺんぎんケーキ', 380);";
sql += "insert into products (id, code, name, price) values (2,'C-002','らくだカステラ', 250);";
sql += "insert into products (id, code, name, price) values (3,'C-003','くじらキャンディ', 160);";
SQLiteCommand com = new SQLiteCommand(sql, con);
com.ExecuteNonQuery();
}
catch (SQLiteException exc) {
System.Diagnostics.Debug.WriteLine(exc.Message);
}
finally {
con.Close();
}
tryブロック内でSQLの実行をします。実行するSQL文の文字列を準備します。SQLiteでは改行コードではSQL文の区切りとはみなされず、例外が発生し実行が停止するため、複数のSQL文を実行する場合は";"で区切り実行します。
INSERT文は結果レコードを返さないSQL文のため、ExecuteNonQuery メソッドを呼び出しSQL文を実行します。
string sql = "insert into products (id, code, name, price) values (1,'C-001','ぺんぎんケーキ', 380);";
sql += "insert into products (id, code, name, price) values (2,'C-002','らくだカステラ', 250);";
sql += "insert into products (id, code, name, price) values (3,'C-003','くじらキャンディ', 160);";
SQLiteCommand com = new SQLiteCommand(sql, con);
com.ExecuteNonQuery();
下記のSQLは問題なく実行できます。
string sql = "insert into products (id, code, name, price) values (1,'C-001','ぺんぎんケーキ', 380);";
sql += "insert into products (id, code, name, price) values (2,'C-002','らくだカステラ', 250);";
sql += "insert into products (id, code, name, price) values (3,'C-003','くじらキャンディ', 160);";
改行コードでSQL文を区切った下記SQLは例外が発生します。
string sql = "insert into products (id, code, name, price) values (1,'C-001','ぺんぎんケーキ', 380)\r\n";
sql += "insert into products (id, code, name, price) values (2,'C-002','らくだカステラ', 250)\r\n";
sql += "insert into products (id, code, name, price) values (3,'C-003','くじらキャンディ', 160)\r\n";
";"と改行コードで区切った場合は例外は発生せず、SQL文は正しく実行できます。
string sql = "insert into products (id, code, name, price) values (1,'C-001','ぺんぎんケーキ', 380);\r\n";
sql += "insert into products (id, code, name, price) values (2,'C-002','らくだカステラ', 250);\r\n";
sql += "insert into products (id, code, name, price) values (3,'C-003','くじらキャンディ', 160);\r\n";
プロジェクトを実行します。下図のウィンドウが表示されます。
[button3]をクリックします。画面では特に反応はありません。
こちらの記事で実装した[button4]をクリックします。SQLのSELECT文を利用して、テーブルのレコードを取得してテキストボックスに表示します。[button3]で挿入したレコードがテキストボックスに表示されることが確認できます。
[button3]を複数回クリックすると、クリックした回数3レコードずつレコードが追加されます。
例外をキャッチしない場合は、usingを利用するとシンプルにコードを記述できます。
下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
namespace SimpleUsingSQLiteDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
using (SQLiteConnection con = new SQLiteConnection("Data Source=mydb.sqlite;Version=3;")) {
con.Open();
string sql = "insert into products (id, code, name, price) values (1,'C-001','ぺんぎんケーキ', 380);\r\n";
sql += "insert into products (id, code, name, price) values (2,'C-002','らくだカステラ', 250);\r\n";
sql += "insert into products (id, code, name, price) values (3,'C-003','くじらキャンディ', 160);\r\n";
SQLiteCommand com = new SQLiteCommand(sql, con);
com.ExecuteNonQuery();
}
}
}
}
SQLiteConnection オブジェクトを作成するコードをusingで囲むことにより、usingのブロックを抜けた際に自動的にSQLiteConnectionをCloseします。