Day05-1
概要
このレッスンの狙い
- プログラムからデータベースにアクセスする方法について学習していく。
Calenderコントロールのイベント
- Calenderコントロールは、月別のカレンダを表示するためのサーバコントロールである。
- ユーザによる操作やASP.NETの内部な処理によって発生するさまざまなイベントを公開している。
Calenderコントロールの主なイベント
| イベント |
概要 |
| DayRender |
カレンダ内の日付セルを作成するタイミングで発生 |
| SelectionChanged |
カレンダ上の日付を選択したタイミングで発生 |
| VisibleMonthChanged |
カレンダの表示月を変更したタイミングで発生 |
- 参考書の例では、第2引数として受け取った
DayRenderEventArgsオブジェクトを介することで、
現在描画しているセル(TableCellオブジェクト)やセルがあらわす日付(CalenderDayオブジェクト)などの情報を取得できる。
CalenderDayクラスの主なプロパティ
| プロパティ |
概要 |
| Date |
日付(DateTimeオブジェクト) |
| DayNumberText |
日付(数値) |
| IsOtherMonth |
カレンダで表示された月以外の日付か |
| IsSelectable |
日付は選択可能か |
| IsSelected |
日付は選択されているか |
| IsToday |
今日の日付か |
| IsWeekend |
日付は週末(土日)であるか |
e.Day.Date.ToString("yyyy/MM/dd")
データベースに接続する
- ASP.NET(.NET Framework)におけるデータベース接続の手続きは
きわめて定型的である。
Dim setting As ConnectionStringSetting = _
CongigurationManager.ConnectionStrings("MyDB")
Dim factory As DbProviderFactory = _
DbProviderFactories.GetFactory(setting.ProviderName)
Using db As DbConnection = factory.CreateConnection()
db.ConnectionString = setting.ConnectionString
...中略...
db.Open()
...中略...
End Using
Using句
構文
Using 変数名 As データ型 = 式
...処理内容...
End Using
Using命令で宣言されたオブジェクト変数はUsingブロックを出た直後に自動的に破棄されます。
データベースにコマンドを追加する
Dim comm As DbCommand = factory.CreateCommand()
comm.CommandText = "SELECT SID,SUBJECT,STIME FROM SCHEDULE WHERE SDATE=@SDATE"
comm.Connection = db
解説
- SQL文の実行を行うのは、
DbCommandオブジェクトの役割である。
- DbCommandoオブジェクトは、
DbProvideFactoryオブジェクトのCreateCommandメソッドで生成することができる。
DbCommandオブジェクトで、必ず設定しなければならないプロパティは
CommandTextプロパティ: SQL命令
Connectionプロパティ: 接続
CommandTextプロパティで指定されたSQL文に対して具体的なパラメータを引き渡しているのは下記の箇所である、
Dim param As DbParameter = factory.CreatePara,ter()
param.ParameterName = "@date"
param.Value = e.Day.Date.ToString("yyyy/MM/dd")
comm.Parameters.Add(param)
- パラメメータを管理するのは、
DbParameterオブジェクトの役割である。
ParameterNameプロパティでパラメータ名を設定できる。
Valueプロパティでパラメータの値を設定できる。
- 作成されたパラメータをコマンドに対して関連付けるには、
取得した結果セットの処理
ExecuteReaderメソッドは、戻り値として、DbDataReaderオブジェクトを返す。
DbDataReaderオブジェクトはSELECT命令によって取り出されたレコード群を格納するための仮想的なテーブルを表すと同時に
、結果セットを先頭から順に読み込むための機能を提供する。
レコードポインタ
- 結果セットとはとはいわゆる二次元の表であるが、ASP.NETアプリケーションからこれを読み込む場合、表の任意のフィールドに任意にアクセスするというわけにはいかない。
- 現在読み込み可能な行を表す内部的な目印として,レコードポインタを使用する。
- レコードポインタが指し示す現在行のことを,カレントレコードという。
レコードポインタの移動
Do While reader.Read()
...中略...
Loop
解説
- Readメソッドは,レコードポインタを次のレコードに移動しながら,カレントレコードに含まれるフィールド群を自分自身にfetchしてくる。
- 次のレコードに移動できない場合は,
Falseを返す。
HyperLinkコントロール
| プロパティ |
概要 |
| ImageUrl |
リンクイメージ |
| NavigateUrl |
リンク先のURL |
| Target |
リンクターゲット |
| Text |
リンクテキスト |
結果セットの取得
構文
DbDataReaderオブジェクト("インデックス")
- インデックスには列番号,または結果セットから取得したい列名を直接指定することができる。
結果セットの取得2
構文
DbDataReaderオブジェクト.Get型("インデックス")
- それぞれ必要に応じて,取得したい型を指定することができる。
GetInt32
GetBoolean
GetChar
GetInt
GetString
- 読みにくいので結果セットの取得1をおすすめする。
データベースアクセス関連のオブジェクトのまとめ
| オブジェクト名 |
概要 |
| ConfigurationManager |
接続文字列などの設定情報にアクセス |
| DbProviderFactory |
DbConnectionやDbCommandなどのオブジェクトを生成 |
| DbConnection |
データベースの接続を管理 |
| DbCommand |
パラメータ情報を管理 |
| DbDataReader |
結果セットを読み込むための手段を提供 |
Calenderコントロールの主なプロパティ
- Calenderコントロールの主なプロパティを下記にまとめる。
表示全般
| プロパティ |
概要 |
| ShowDayHeader |
曜日見出しを表示するか |
| ShowGridLines |
グリッドラインを表示するか |
| ShowNextPrevMonth |
前後月へのナビゲーションを表示するか |
| ShowTitle |
タイトルを表示するか |
テキスト
| プロパティ |
概要 |
| Caption |
キャプション |
| CaptionAlign |
キャプションの配置(Top, Bottom, Left, Right) |
| NextMonthText |
翌月を表すテキスト |
| PrevMonthText |
前月を表すテキスト |
| SelectMonthText |
セレクタ列の月選択テキスト |
| SelectWeekText |
セレクタ列の週選択テキスト |
| DayNameFormat |
曜日名の書式 |
| 設定値 |
概要 |
| FirstLetter |
最初の一文字(Ex: M) |
| FirstTwoLetter |
最初の二文字(Ex; Mo) |
| Full |
完全形式(Ex: MonDay) |
| Short |
省略形式(Ex: Mon) |
| Shortest |
現在の地域設定に対応する最も短い省略形式 |
| 設定値 |
概要 |
| CustomText |
カスタムのテキスト |
| FullMonth |
完全な月名(Ex: January) |
| ShortMonth |
省略された月名(Ex: Jan) |
| 設定値 |
概要 |
| Month |
月で表示 |
| MonthYear |
年月で表示 |
挙動
| プロパティ |
概要 |
| FirstDayOfWeek |
先頭の曜日 |
SectionMode
| 設定値 |
概要 |
| Day |
単一の日付のみを選択可能 |
| DayWeek |
単一の日付,または週を選択可能 |
| DayWeekMonth |
単一の日付,週,または月を選択可能 |
| None |
日付の選択は不可 |
情報
| プロパティ |
概要 |
| SelectedDate |
カレンダ上で選択された日付 |
| SelectedDates |
カレンダ上で選択された日付(配列) |
| TodaysDate |
今日の日付 |
| VisibleDate |
表示月 |
スタイル
| プロパティ |
概要 |
| DayHeadderStyle |
曜日の外観 |
| DayStyle |
日付の外観 |
| NextPrevStyle |
前後月へのナビゲーションへの外観 |
| OtherMonthDayStyle |
現在月以外の日付の外観 |
| SelectedDayStyle |
セレクタ列の外観 |
| TitleStyle |
タイトルの外観 |
| TodayDayStyle |
今日の日付の外観 |
| WeekendDayStyle |
週末(土日)日付の外観 |
SqlDataSourceコントロールを使った書き換え
- SqlDataSourceコントロールのプロパティを以下のように設定する
| プロパティ |
設定値 |
| ConnectionString |
MyDB |
| DataSourceMode |
DataReader |
| ProviderName |
System.Data.SqlClient |
| SelectQuery |
SELECT sid, subject, stime FROM Schedule WHERE (sdate= @sdate) |
DayReaderイベントハンドラを以下のように書き換える
<@ Import Namespace="System.Data" %>
...中略...
Protected Sub cal_DayRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs)
sds.SelectParameters.Clear()
sds.SelectParameters.Add("sdate", e.Day.Date.ToString("yyyy/MM/dd"))
Dim reader As IDataReader = sds.Select(DataSourceSelectArguments.Empty)
Do While reader.Read()
...中略...
Loop
reader.Close()
End Sub
解説
構文
ParameterCollection.Add(パラメータ名, 値)
- Selectメソッドには引数として追加の拡張パラメータを表す
DataSourceSelectArgumentオブジェクトを指定する必要がある。
- ここでは、特に追加のパラメータは必要ないので、
DataSourceSelectArgument.Emptyプロパティで空のオブジェクトを取得し、Selectメソッドに引き渡している。
- Selectメソッドの戻り値は
DataSourceModeプロパティの設定によって異なるが、ここではDataReader値を指定しているので、IDataRederオブジェクトを返す。
まとめ
CalenderコントロールのDayRenderイベントを使用することで、カレンダ上の各日付セルをプログラムから動的に操作できる。
- データベースへの接続、コマンド、パラメータを管理するのは、それぞれ
DbConnection/DbCommand/DbParameterオブジェクトの役割である。
DbConnectionオブジェクトのような高価なオブジェクトはUsing命令で宣言することで、使用後に即座に破棄することができる。
- データベースに対してSELECT命令を発行するのは、
DbCommandオブジェクトのExecuteReaderメソッドの役割である。
ExecuteReaderメソッドは、抽出した結果セットを表すDbDataReaderオブジェクトを返す。
DbDataReaderオブジェクトは読み取りの現在位置を表すレコードポインタを持つ。
- ポインタが示す現在行のことをカレントレコードという。
以上
TOPへ