特集:全1回 .NET FrameworkをUNIXで動かす「Mono Project」dev .NET(7/9 ページ)

» 2004年06月24日 22時45分 公開
[大澤文孝,ITmedia]

ASP.NETとMono

 簡単なコンソールアプリケーションが動くだけではつまらないだろう。そこでここでは、より現実的に使えるようなASP.NETアプリケーションが動くかどうかを調べてみよう。

 ここでは、SQL Serverのpubsデータベースのauthorsテーブルからレコードを取り出し、それをDataGridコントロールに表示するプログラムを考える(画面4)。SQL Serverということから分かるように、ここでは、ADO.NETの動作テストも兼ねようという狙いである。


pubsデータベースは、SQL Serverにサンプルとして含まれるデータベースである。
画面4■Webアプリケーションの例(IISでホストした場合)

 本稿は、ASP.NETにおけるWebアプリケーションの作り方を目的としたものではないため、画面4の実行結果を得るためのリストの詳細は説明しない。リストは本稿末からダウンロードできるようにしてあるので、実際に試してみようという人は、そちらのリストを参照してほしい。ここでは、画面4のアプリケーションで何をしているのかという簡単な補足にとどめる。

1. DataSetを使ったデータベースの読み出し

 画面4では、SqlConnection、SqlDataAdatperというオブジェクトを使いSQLデータベースに接続し、データベース上のデータベースをDataSetオブジェクトに格納、そしてDataGridコントロールにデータバインディングしている。コードを示すと、下記のようになる。


private void Page_Load(object sender, System.EventArgs e)
{
    sqlConnection1.ConnectionString = 
        ConfigurationSettings.AppSettings["DSNSTRING"];
    sqlDataAdapter1.Fill(dataSet11);
    this.DataBind();
}

 実際に実行するためには、pubsデータベースがインストールされているSQL Server環境が必要だ。どのデータベースに接続するのかは、Web.configファイルのappSettings要素で記述できるようにしてある。

<appSettings>
<add key="DSNSTRING"
value="Server=サーバーのIPアドレス;Database=pubs;User ID=ここにユーザー名を入れる; Password=ここにパスワードを入れる;Integrated Security=SSPI;"/>
</appSettings>

 実稼働させる場合には、上記の部分を、利用するデータベースの環境に合わせてほしい。

 なお、Windows環境(IIS環境)では、SQL Serverに接続する際に、Windowsアカウントを用いる「Windows認証」を使えるが、UNIX上では、Windowsアカウントと統合できない。そのため、「SQL Server認証」を使い、User IDパラメータとPasswordパラメータを使ってデータベースに接続するアカウントを指定する方式をとる。そのため、SQL Serverの認証方式が「統合モード」になっていない場合には、正しく通信ができない。


SQL Serverの認証方式を変更するには、SQL ServerのEnterprise Managerを使って、「セキュリティ」タブの設定で変更する。統合モードとは、「Windows認証」と「SQL Server認証」の両方を利用できるモードである。


「Integrated Security=SSPI」は、本来はWindows認証のときに使うものなのだが、この指定をせずに、ユーザー名とパスワードを指定しただけでは、筆者の環境では、正しくSQL Serverに接続できなかった。これが筆者の環境によるものなのか、Monoによるものなのかは定かではない。


Mac OS X版のMonoでは、正しくSQL Serverに接続できなかった。SQL Serverのログを参照すると、「接続が開かれましたが、送信されたログインパケットが無効です。接続は閉じられました。」というメッセージが残っていたので、これはプロトコルの実装の問題だと思われる。そのため、以下の例ではLinux(Fedora Core 2)における実行検証しかしていない。ほかのOSの場合には、幾つかの問題が起きる可能性もある。

 本稿では、Windows環境のASP.NETアプリケーションがそのまま動くかどうかを確かめることを目的としたため、Windows環境のデータベースとして代表的なSQL Serverを使うことにするが、Monoには、MySQLやPostgreSQLなどのオープンソースのデータベースに接続できる接続プロバイダも用意されている。これらを利用して、UNIX環境のデータベースに接続することが可能なはずである。

2. DataGridコントロールを使った並べ替え

 DataGridコントロールでは、10件ずつレコードを表示するようにし、画面下の「1」「2」……というリンクをクリックすることで、前ページや次ページに移動するようにしてある。この機能を提供するコードは、次の通りである。


private void DataGrid1_PageIndexChanged(object source,
System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex = e.NewPageIndex;
this.DataBind();
}

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ