Visual Studio 2008を使って簡単なWebアプリを作ってみる

Visual Studio 2008がもう既にリリースされている。

上記のページから、

が無償でダウンロードできる。MS製開発ツールが無償なのは、今ではもう当たり前のこと。

Visual Web Developer 2008 Express Editionで掲示板を作ってみる

とりあえず練習としてASP.NETによるWebアプリを作ってみることにした。練習で作るWebアプリといえば、やっぱり掲示板だ。

Visual Studioの製品群でWebアプリを作るときに使うのは、Visual Web Developerだ。バージョン2003までしか知らない人には意外かも知れないけど、バージョン2005からはそういう事になってる。

Visual Web Developerは、VBC#のどちらかを使ってASP.NETによるWebアプリを作るための開発ツールであるということ。

逆に言うと、Visual BasicやVisual C#といったツールはexeやdllを作るためのもの、と考えるといい。

用意するもの

SQL ServerはVisual Web Developerをインストールするときに一緒に入れることができる。

新しい Web サイト

  1. Visual Web Developerを起動
  2. メニューから「ファイル」「新しい Web サイト」を選択
  3. テンプレートは「ASP.NET Web サイト」を選択
  4. 場所は「ファイルシステム」を選び、ファイルを保存するディレクトリを指定
  5. 言語は「Visual Basic
  6. 「OK」をクリック

これで空っぽのWebサイトが作られる。言語は本当はC#の方が得意だけど、なんとなくVBにしてみた。

データベースの作成

まずはデータを格納するDBを用意する。

  1. ソリューション エクスプローラの「App_Data」の上で右クリック
  2. 「新しい項目の追加」を選択
  3. テンプレートは「SQL Server データベース」を選択
  4. 名前は「Database.mdf」のままで良い
  5. 言語は「Visual Basic」のままで良い
  6. 「追加」をクリック

App_Dataは、このWebアプリで使うためのデータ関係を格納する場所と決まっている。データベースもこのフォルダに作る。

「データベースをファイルとして作る」という感覚は、OracleとかMySQLPostgreSQLをやってる人には新鮮かも知れない。これは簡単に言うと、Accessmdbの考え方を取り入れているってこと。

データベースをファイルとして作るので、テスト用のDBに差し替えたり、データベースのバックアップを取ったり、新しい開発環境を作ったりするのが超簡単だ。この機能は神だと思う。もちろん、全てはSQL Serverエンジンで動くので、mdbのようなガタガタな信頼性ではない。

テーブルの作成

DBを準備したら、次はテーブルの作成。今回は以下のようなテーブル設計にした。

列名 PK Null
id int Not Null
subject text - -
name text - -
body text - -
timestamp datetime - Not Null

テーブル名「Bbs」としてこれを作成する。

  1. メニューから「表示」「データベース エクスプローラ」を選択
  2. 「Database.mdf」の中の「テーブル」の上で右クリック
  3. 「新しいテーブルの作成」を選択
  4. テーブル定義を記入
  5. Ctrl + Sを押す
  6. テーブル名「Bbs」を入力して「OK」

create文とかは特に書かなくて良い。

これでテーブルが完成。

テストデータの投入

このテーブルに、とりあえずテストデータを何件か入れておく。

  1. データベース エクスプローラの「Bbs」テーブルの上で右クリック
  2. 「テーブル データの表示」を選択
  3. 開いた画面にデータを入れる

Visual Studioさえあれば、よくあるDB管理ツール(CSEとかOracle SQL Developerなど)みたいな感じでデータを作ったりできる。

データセットの作成

コードからこのテーブルにアクセスするために、データセットを作る。データセットってのは、いわゆるデータアクセス層のことだ。SQLを発行する機能と、データを格納するエンティティ。

  1. ソリューション エクスプローラのWebサイトの上で右クリック
  2. ASP.NET フォルダの追加」「App_Code」を選択
  3. App_Codeが作成されるので、その上で右クリック
  4. 「新しい項目の追加」を選択
  5. テンプレートは「データセット」を選択
  6. 名前は「DataSet.xsd」とする
  7. 言語は「Visual Basic」のままで良い
  8. 「追加」をクリック

データセットができたので、この中にエンティティを作る。

  1. ソリューション エクスプローラの「DataSet.xsd」をダブルクリックして開く
  2. データベース エクスプローラの「Bbs」テーブルを、開いた画面の中にドラッグ & ドロップ

これで、テーブル定義をそのまま持つエンティティ(DataTable)と、これにデータを詰め込む機能(DataAdapter)が生成される。

画面の作成

いよいよ画面を作成。Visual Web Developerにはなかなか優秀な画面デザイナが入っているが、やっぱりまだまだキレイなhtmlが書けるほどではない。自分は凝り性なので、手書きで書いてしまう。

といっても今回は練習なので、できるだけシンプルに。もともとある「Default.aspx」の内容を以下のように修正した。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>掲示板</title>
    </head>
    <body>
        <h1>掲示板</h1>
        <hr />
        <asp:Repeater ID="BbsRepeater" runat="server">
            <ItemTemplate>
                <h2><%#HttpUtility.HtmlEncode(DataBinder.Eval(Container.DataItem, "subject").ToString())%></h2>
                <p>
                    <%#HttpUtility.HtmlEncode(DataBinder.Eval(Container.DataItem, "name").ToString())%>
                    <%#HttpUtility.HtmlEncode(DataBinder.Eval(Container.DataItem, "timestamp").ToString())%>
                </p>
                <p>
                    <%#HttpUtility.HtmlEncode(DataBinder.Eval(Container.DataItem, "body").ToString())%>
                </p>
            </ItemTemplate>
            <SeparatorTemplate>
                <hr />
            </SeparatorTemplate>
        </asp:Repeater>
    </body>
</html>

コードビハインドの作成

画面の裏にコードあり。これがWebアプリ。Default.aspx.vbに、以下のコードを書く。

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender

        Dim da As New DataSetTableAdapters.BbsTableAdapter()
        Dim dt As DataSet.BbsDataTable = da.GetData()
        BbsRepeater.DataSource = dt

        Me.DataBind()

    End Sub

End Class

PageのPreRenderイベントの中にコードを書く。

  1. さっき作ったDataSetの中に自動生成されたBbsTableAdapterをインスタンス
  2. BbsTableAdapterの中に自動生成されたGetDataメソッドを呼び出して、BbsDataTable(エンティティ)に格納
  3. そのBbsDataTableを画面のBbsRepeaterのデータソースに割り当てる
  4. データバインド実行

こんな感じのことをやってる。

実行

これで終わり。F5キーを押して、ブラウザから画面を見てみる。

やった。うまく表示された。

とりあえずここまで

実質VBのコードは4行しか書いてない(画面のhtmlは書いたけど)。テーブル設計は画面で簡単にできるし、データアクセス関連はテーブルをドラッグ & ドロップするだけだし、かなり簡単なのがわかると思う。この文章を書いたり画面キャプチャを取りながら、だいたい1時間30分くらいでここまで作った。

なんか周囲でみんなが大掃除してるので、今日はここまで。次はデータ登録をやる。