WebMatrix はどうやって、データベースに接続しているのか

SQL Server Compact が単体で動くのかを調べるのと同時に、ちょっと不思議だったのが WebMatrix のデータベース接続です。自動生成される Raizor のソースを見る限り LINQ で接続しているわけでもないし、どういう風に表示しているのかな、と思っていたのですが。具体的には、WebMatrix.Data.dll という WebMatrix 付属のデータアクセスコンポーネントを使っています。

webmatrix を起動して、ベーカリーのテンプレートで自動生成して、Default.cshtml を開くと、

@{
    Page.Title = "Home";

    var db = Database.Open("bakery");
    var products = db.Query("SELECT * FROM PRODUCTS").ToList();
    var featured = products[new Random().Next(products.Count)];
}

<h1>Welcome to Fourth Coffee!</h1>

のようなコードがあります。
この「Database.Open」のところでデータベースへの接続、「db.Query」でクエリの実行、ってことが想像できます。
MSDN 上のヘルプはこちら、Database.Open Method (WebMatrix.Data)

■windows アプリで webmarix.data.dll を使う

ならば、web 上の webmatrix じゃなくて、windows form でも使えるのでは?と思って試しに接続してみました。

1.先のテンプレートサイトの bin フォルダにある webmatrix.data.dll を参照設定
2.app_data/bakery.sdf を windows プロジェクトにコピー

3.「using WebMatrix.Data;」を追加
4. コードを記述

string CNSTR = "app_data\\bakery";
private void button1_Click(object sender, EventArgs e)
{
	var db = Database.Open(CNSTR);
	var products = db.Query("SELECT * FROM PRODUCTS").ToList();
	dataGridView1.DataSource = products;
}

接続文字列…というか、Openメソッドに渡す string は comapct のデータファイルそのものです。実行ファイルのカレントディレクトリから参照されるようなので、”app_data\\bakery” を渡しておきます。同じフォルダにある場合は “bakery” だけでも ok です。

こうすると、さっくりと実行できます。

まあ、windows フォームなんだから LINQ to Entities を使えばよいし、SQL 文を直接記述したい場合には SqlCommand や SqlDataAdapter を使えばよいので、あまりメリットはないのですが、さっくりと接続したときには便利…かもしれませんね。

■ちなみに、webmatrix.data.dll と *.exe だけで動くのか?

と、肝心なことを。

この webmatrix.data.dll と *.exe 、*.sdf(データベースファイル)を windows 7 のコンピュータにコピーするだけで動作するのかどうか?、と試してみたのですが駄目でした。別途、「sql server compact edition」のインストールが必要になります。SQL Server の express edition を入れるよりは軽いとはいえ、インストールしないと使えないのはなぁ、という懸念が。

こうなると、データファイルをコピーするだけで動作可能(他のセッティングが不要)なのは、

  • SQLite(未検証)
  • Access

ってところですかね。XML ファイルを用意して、linq to xml で検索することも可能なのですが、ガッツリ読み込んでしまうので、でかいファイル(100MBのファイルとか)はちょっとなぁという感じがするのです。もっとも、それだけ大きくなると、access では駄目なような気もしますが。これは要検証ということで。

カテゴリー: C#, データベース パーマリンク

WebMatrix はどうやって、データベースに接続しているのか への1件のコメント

  1. Frenchy のコメント:

    You can always tell an expert! Thanks for cogbtiturinn.

コメントは停止中です。