SQLiteのテーブルを作成する - C#

C#でSQLiteのテーブルを作成するコードを紹介します。

事前準備

SQLiteのインストールとデータベースの作成をしておく必要があります。SQLiteのインストールはこちらの記事を参照してください。また、データベースの作成はこちらの記事を参照してください。

プログラム例

UI

下図のUIを作成します。こちらの記事で作成したフォームにボタンを一つ追加します。このプログラムでは[button2]のみを利用します。

コード

下記のコードを記述します。
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 button2_Click(object sender, EventArgs e)
    {
      SQLiteConnection con = new SQLiteConnection("Data Source=mydb.sqlite;Version=3;");
      con.Open();
      try {
        string sql = "create table products (id int, code varchar(8), name varchar(20), price int)";

        SQLiteCommand com = new SQLiteCommand(sql, con);
        com.ExecuteNonQuery();
      }
      finally {
        con.Close();
      }
    }
  }
}

解説

SQLiteへの接続オブジェクト、SQLiteConnectionオブジェクトを作成します。
  SQLiteConnection con = new SQLiteConnection("Data Source=mydb.sqlite;Version=3;");

SQLiteへの接続文字列のフォーマットは下記となります。
データベースファイルを利用する場合
Data Source=(SQLiteのデータベースファイル名);Version=3;
UTF16でエンコーディングする場合
Data Source=(SQLiteのデータベースファイル名);Version=3;UseUTF16Encoding=True;
パスワードが必要な場合
Data Source=(SQLiteのデータベースファイル名);Version=3;Password=(パスワード);
メモリDBを利用する場合
Data Source=:memory:;Version=3;

作成したSQLiteConnectionオブジェクトの Open()メソッドを呼び出してSQLiteとの接続を開きます。接続はデータベースの利用が終了した場合、確実に閉じる必要があるため、tryブロックを利用し、finally部分にClose()メソッドを記述し、エラーが発生した場合でも確実にデータベースとの接続を閉じるようにします。
  con.Open();
  try {
    string sql = "create table products (id int, code varchar(8), name varchar(20), price int)";

    SQLiteCommand com = new SQLiteCommand(sql, con);
    com.ExecuteNonQuery();
  }
  finally {
    con.Close();
  }

tryブロック内でSQLを実行するコードが下記になります。テーブルの作成はSQLの create table 文を実行して作成します。 CREATE TABLE文についてはこちらの記事を参照してください。
コマンドを実行するためのSQLiteCommandオブジェクトを作成します。コンストラクタの引数に、実行するSQL文とSQLiteの接続オブジェクト(SQLiteConnection)を与えます。
create table文は結果レコードを返さないクエリのため、作成したSQLiteCommandオブジェクトのExecuteNonQuery()メソッドを呼び出してSQL文を実行します。
  string sql = "create table products (id int, code varchar(8), name varchar(20), price int)";

  SQLiteCommand com = new SQLiteCommand(sql, con);
  com.ExecuteNonQuery();

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button2]をクリックします。特に画面上では反応はありません。


実行ファイルの配置してあるディレクトリを確認します。データベースファイル"mydb.sqlite"が作成され、ファイルのサイズが大きくなっています。(データベースファイルを作成しただけではサイズは0バイトです。)

補足1

もう一度[button2]をクリックすると、すでにテーブルが作成されているため、System.Data.SQLite.SQLiteExceptionが発生します。

補足2

データベースのファイルが作成されていない状態で、[button2]をクリックすると、接続文字列に設定したファイル名で、データベースファイルが作成されテーブルも作成される動作となります。

上記の手順でSQLiteのデータベースにテーブルを作成できました。

補足:usingを利用した記述方法

例外をキャッチしない場合は、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 button2_Click(object sender, EventArgs e)
    {
      using (SQLiteConnection con = new SQLiteConnection("Data Source=mydb.sqlite;Version=3;")) {
        con.Open();
        string sql = "create table products (id int, code varchar(8), name varchar(20), price int)";

        SQLiteCommand com = new SQLiteCommand(sql, con);
        com.ExecuteNonQuery();
      }
    }
    
  }
}

解説

SQLiteConnection オブジェクトを作成するコードをusingで囲むことにより、usingのブロックを抜けた際に自動的にSQLiteConnectionをCloseします。また、SQLiteDataReader オブジェクトを取得するコードをusingで囲むことで、SQLiteDataReaderによる読み込みが終了し、usingのブロックを抜けた時点で自動的にSQLiteDataReaderをCloseします。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-07
作成日: 2018-04-24
iPentec all rights reserverd.