簡単なコンソールアプリケーションが動くだけではつまらないだろう。そこでここでは、より現実的に使えるようなASP.NETアプリケーションが動くかどうかを調べてみよう。
ここでは、SQL Serverのpubsデータベースのauthorsテーブルからレコードを取り出し、それをDataGridコントロールに表示するプログラムを考える(画面4)。SQL Serverということから分かるように、ここでは、ADO.NETの動作テストも兼ねようという狙いである。
pubsデータベースは、SQL Serverにサンプルとして含まれるデータベースである。
本稿は、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.