目的
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))
{
Table aTableTest = 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。