2011年05月30日

Windows Phone 7:Sql Server Compact Editionを使ってみる

 (以下の記事はWindows Phone 7.1βのものです)

 Windows Phone 7は次期バージョン”Mango”からローカルデータベースが利用可能になる。
 SQL Server Compact Edition(CE)というデータベースでSQLiteのような軽量データベースのようだ。

 「Windows Phone codenamed "Mango" Training Course」にもサンプルがあるが、規模が大きく、データベースの処理だけ簡単に理解というのは難しく感じました。

 というわけで以下に簡単コードを掲載。

DataContextクラスがデータベースを表す



 それでは吉野家のメニューをDB管理する簡単コードを作成します。
 (なぜ吉野家なのかは、完全に趣味です)

 DataContextクラスを利用するには、system.data.linqを参照に加える必要があります。

001


 続いて、以下のUsing句を追加。 

using System.Data.Linq;
using System.Data.Linq.Mapping;
using Microsoft.Phone.Data.Linq.Mapping;


 DataContextクラスを作成。

public class YoshinoyaDataContext : DataContext
{
public Table<Menu> Menu;

public YoshinoyaDataContext(string connection) : base(connection) { }
}


 データベースは一つのテーブルMenuクラスを持っています。
 続いてMenuテーブルを定義。

[Table]
public class Menu
{
[Column(IsPrimaryKey = true)]
public int MenuID { get; set; }

[Column]
public string Name { get; set; }

[Column]
public int Price{ get; set; }
}


 Table、Columnという属性(attribute)を使っています。
 Tableはテーブルを、Columnはそのカラムを表します。MenuIDがプライマリーキーです。
 (この辺はリレーショナルデータベースの知識ですね)

データベースを作成して使用する



 次はデータベースにデータを挿入(insert)して、取得(select)してみましょう。


// DB作成
YoshinoyaDataContext db = new YoshinoyaDataContext("isostore:/yoshinoyaDB.sdf");
if (db.DatabaseExists() == false)
{
  db.CreateDatabase();
}

List<Menu> menus = new List<Menu>
{
  new Menu() { MenuID = 1, Name = "牛丼", Price = 280},
  new Menu() { MenuID = 3, Name = "豚丼", Price = 250},
  new Menu() { MenuID = 2, Name = "卵", Price = 50}
};
// インサート(SubmitChangesを忘れると変更されない)
db.Menu.InsertAllOnSubmit<Menu>(menus);
db.SubmitChanges();

// LINQで取得
var q = from menu in db.Menu
  orderby menu.MenuID
  select menu;

foreach (var tmp_menu in q)
{
  System.Diagnostics.Debug.WriteLine("ID = {0}, Name = {1}, Price = {2}", tmp_menu.MenuID, tmp_menu.Name, tmp_menu.Price);
}


 やはりDBがあるのは良いですね!!

 サンプルソース(要WPDT7.1 Beta)

coelacanth_blog at  twitterでつぶやく  03:40コメント(0)トラックバック(0)WindowsPhone  この記事をクリップ!

トラックバックURL

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星
 
 
 
Profile

シーラカンス

Recent Comments
QRコード
QRコード
livedoor Readerに登録
RSS
livedoor Blog(ブログ)