WebMatrix 3 で Wiki クローンを作る vol.1
執筆日時:
前回(WebMatrix 3 で Wiki クローンを作る vol.0 - だるろぐ)からすでに1ヶ月たちましたが、だいたいこんなペースで、気が向いたときにやっていくと思います。すまんやで!
さて、今回はデータの読み書きです。Wiki と言えば、データはテキストとして保存するるタイプが多いんですかね? まぁ、それでもいいんですけど、WebMatrix では SQL Server Compact Edition(SQL CE と略されることが多いです)が簡単に扱えるので、それを利用したいと思います。
SQL CE というのは Microsoft SQL Server 兄弟の末弟で、SQLite みたいにポータブルに扱えるタイプのデータベースです。ちなみに、WebMatrix はそのお兄さん(SQL Server)や、お兄さんのライバル(MySQL)なんかともなかよくできるのですけれど、ああいうのはインストールとかセッティングとかメンテナンスとか面倒ですよね。その点、SQL CE はデータベースファイルをひとつポンと作るだけなので楽ちんです。ちなみに、タダ。
データベースの作成

WebMatrix でデータを扱うには、[データベース]というワークスペースを選択します。

では、さっそくデータベースを作りましょう。データベースのファイル名はなんでもいいです。今回はプロジェクト名そのままの“Green Tights.sdf”にしました。続いてテーブルの作成。

今回はこんなかんじにしてみました。ついでにテーブルの定義も作っておきましょう。テーブルの名前は“Post”で、投稿を管理するテーブルです。
- PostId:bigint(でっかい整数)型。“主キーかどうか”“ID かどうか”の両方を“はい”にしました。テーブルに行が挿入されると自動でインクリメントされるはずです。
- Title:最大60文字の nvarchar(文字列)型。文字数は適当……。“Null(からっぽ)を許可”を“いいえ”にしておきます。
- RawText:ntext 型。あらかじめ文字列の数を決めなくてよいテキスト型。本文をぶちこんでおくには最適かな?
- CreatedAt:datetime(日時)型。その名の通り作成日時です。
- UpdatedAt:datetime(日時)型。今回は使いませんが、のちのち更新日を記録しておきたくなると思うので。
これを“Post”という名前で作っておきます。
データの入力画面の作成

[ファイル]ワークスペースへ移行、とりあえず NewPost.cshtml という名前でデータの入力画面ページをルートフォルダ―に作成します。この画面には、http://***/NewPost でアクセスできます。

コードの方はこんな感じ。ごくごく簡単で、エラー処理っぽいことはしていません。
@{
if (IsPost) // POST 要求だけを受け付けましょう
{
// Request["name"] で送られてきた名前を取得。
// POST データなら Request.Form["name"] の方がフォーマルな書き方かな
var title = Request["title"];
var raw_text = Request["raw-text"];
var now = DateTime.Now;
// データベースを開く。拡張子はいらない
using (var db = Database.Open("Green Tights"))
{
const string query = @"
INSERT INTO Post(Title, CreatedAt, UpdatedAt, RawText)
VALUES(@0, @1, @2, @3)
";
db.Query(query, title, now, now, raw_text);
}
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<form method="post"> <!– Submit すると自分を POST で呼ぶ –>
<p><input type="text" id="title" name="title" /></p>
<p><textarea id="raw-text" name="raw-text"></textarea></p>
<p><input type="submit" /></p>
</form>
</body>
</html>
試しに実行し、[データ]ワークペースでデータを確認してみましょう。表示モードを[定義]から[データ]に切り替えてね!

なにか……入ってますね? 成功! 次回はこれを取り出して表示して見ることにしましょう。おつかれさまです。