目的
Linqを使って、SQLiteのデータベースへデータ参照をする。
本記事のポイント
クラス内のフィールドにDBと対応したマッピングを記述すること。
環境
- Windows7
- Microsoft Visual Studio Community 2015
- SQLite 1.0.98.0
必要なもの
- System.Data.SQLite.dll - ①
- SQLite.Interop.dll (←これがないと実行時エラーとなる)
- System.Data.Linq.dll - ②
準備
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
上記URLから「sqlite-netFx40-setup-x64-2010-1.0.99.0.exe」をダウンロードし、実行する。
ほしいものは、必要なものに記載されているDLL。
インストールされると、「C:\Program Files\System.Data.SQLite\2010\bin」あたりに配置されている。
データベースの構造
今回利用するSQLiteデータベースは下記URLからダウンロードできる。:
(「C:\temp\LinqTest.sqlite」へ配置する。)
LinqTestデータベース | ||
TestTableテーブル | ||
カラム名 | 型 | |
Id | Integer | |
Title | Text | |
Detail | Text |
手順
- コンソールアプリケーションプロジェクトを新規作成する。
- 「参照」に①②を追加する。
- テーブルとマッピングするクラスを追加する。
- テーブルからデータを取得する。
- 確認
1.コンソールアプリケーションプロジェクトを新規作成する。
「ファイル」-「新規作成」-「プロジェクト」を選び、コンソールアプリケーションを選択し、OKを押す。
2.「参照」に①②を追加する。
3.テーブルとマッピングするクラスを追加する。
プロジェクトへクラスを追加する。名前は「TTestData.cs」とする。そのクラスへ「using System.Data.Linq.Mapping;」を追加する。クラスのソース全文は以下に示す。
using System; using System.Data.Linq.Mapping; namespace LinqTest { [Table(Name="TestTable")] class TTestData { //ID [Column(Name = "Id", DbType = "INT", CanBeNull = true, IsPrimaryKey = false)] public Int32? Id { get; set; } // Title [Column(Name ="Title",DbType ="NVARCHAR", CanBeNull =true)] public String Title { get; set; } // Detail [Column(Name ="Detail",DbType ="NVARCHAR", CanBeNull =true)] public String Detail { get; set; } } }
4.テーブルからデータを取得する。
プロジェクトを新規作成した際に自動的に作成されている「Program.cs」のMainメソッドへ、テーブルからデータを取得し、標準出力するためのLinq等のソースを記述する。
usingは以下を追加する。
- using System.Data.Linq;
- using System.Data.SQLite;
- using System.Linq;
using System; using System.Data.Linq; using System.Data.SQLite; using System.Linq; namespace LinqTest { class Program { static void Main(string[] args) { SQLiteConnectionStringBuilder aConnectionString = new SQLiteConnectionStringBuilder { DataSource = @"C:\temp\LinqTest.sqlite" // データベースの保存先 }; using (SQLiteConnection aConnection = new SQLiteConnection(aConnectionString.ToString())) { // データベースを開く aConnection.Open(); // ここにデータベース処理コードを書く using(DataContext aContext = new DataContext(aConnection)) { TableaTableTest = aContext.GetTable (); IQueryable aQueryResult = from x in aTableTest select x; Console.WriteLine("=== test ==="); foreach(TTestData aData in aQueryResult) { Console.WriteLine("=== {0} ===", aData.Id); Console.WriteLine(aData.Title); Console.WriteLine(aData.Detail); } Console.ReadLine(); // Enterキー押下でコマンドプロンプトが閉じる } // データベースを閉じる aConnection.Close(); } } } }
5.確認
以下のようにコマンドプロンプトが表示されればOK。