SQLiteといえば、オープンソースで軽量なRDBMS(リレーショナルデータベース管理システム)。
サーバーとしてではなく、プログラムに組み込んで動作させることができるます。
データは単一のファイルで管理されるため扱いも簡単なSQLiteの基本的な使い方を解説します。
データベースを開く
SQLiteデーターベースへの接続を開始するには「System.Data.SQLite.SQLiteConnection」クラスを使います。
接続先のデータベースを表す接続文字列(ConnectionString)を指定して利用を開始します。
接続文字列は「Data Source=」の後にSQLiteのデータファイル名を記述する形になります。
(接続文字列を作るためのクラス「SQLiteConnectionStringBuilder」をつかってもよさそうです)
var connectionString = "Data Source=test.db"; using (var connection = new SQLiteConnection(connectionString)) { connection.Open(); connection.Close(); }
SQLiteConnectionクラスはIDisposableインターフェースを継承していて、使い終わったらDisposeメソッドを呼び出す必要があります。確実にDisposeが呼び出されるようusingを使うことをお勧めします。
SQLiteConnectionオブジェクトが生成できたら、Openメソッドを呼び出すことでデータベースへのアクセスが可能になります。
データーベースを使い終わったらCloseメソッドを呼び出しましょう。DisposeメソッドがよばれればCloseもされるので省略しても良いかもしれませんが、Disposeはusingのスコープから外れる時まで呼ばれないので、使い終わった時点でCloseを呼ぶのがよさそうです。
SQLを発行する
SQL文を実行するには「System.Data.SQLite.SQLiteCommand」クラスを使います。
SQL文とSQLiteConnectionオブジェクトを引数に渡してSQLiteCommandオブジェクトを生成します。
SQLiteCommandクラスもIDisposableインターフェースを継承しているのでusingを使いましょう。
結果を返さないSQLの場合
InsertやUpdateのような結果がないSQL文の場合はExecuteNonQueryメソッドを使います。
var connectionString = "Data Source=test.db"; using (var connection = new SQLiteConnection(connectionString)) { connection.Open(); var sql = "INSERT INTO test (ID,Data1,Data2) VALUES(1,'001','xxx')"; using (var command = new SQLiteCommand(sql, connection)) { command.ExecuteNonQuery(); } connection.Close(); }
結果を返すSQLの場合
Selectのような結果が返ってくるSQL文の場合にはExecuteReaderメソッドを使います。
ExecuteReaderメソッドは戻り値として「System.Data.SQLite.SQLiteDataReader」オブジェクトを返します。
SQLiteDataReaderを操作することでSQLの結果へアクセスします。
var connectionString = "Data Source=test.db"; using (var connection = new SQLiteConnection(connectionString)) { connection.Open(); var sql = "SELECT * FROM test"; using (var command = new SQLiteCommand(sql, connection)) { using (var reader = command.ExecuteReader()) { while (reader.Read()) { var id = (int)reader["ID"]; var data1 = (string)reader["Data1"]; var data2 = (string)reader["Data2"]; } reader.Close(); } } connection.Close(); }
結果が1つのSQLの場合
レコード数を取得するSQL文などの場合はExecuteScalarメソッドを使う方法もあります。
ExecuteScalarメソッドは結果の先頭行・先頭列の値を戻り値として返します。
var connectionString = "Data Source=test.db"; using (var connection = new SQLiteConnection(connectionString)) { connection.Open(); var sql = "SELECT COUNT(*) FROM test"; using (var command = new SQLiteCommand(sql, connection)) { var count = (int)command.ExecuteScalar(); } connection.Close(); }
コメントをお書きください