• 締切済み

ASP.NET,C#:カレンダーでDBを参照する際

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e) { sds.SelectParameters.Clear(); sds.SelectParameters.Add("sdate", e.Day.Date.ToString("yyyy/MM/dd")); IDataReader reader = (IDataReader)sds.Select(DataSourceSelectArguments.Empty); while (reader.Read()) { Literal ltr = new Literal(); ltr.Text = String.Format( "<br />{0}",reader["subject"]); e.Cell.Controls.Add(ltr); } } いまいちこの処理で何をやっているのかがよくわかりません。 わかりやすくコメントを付けて頂けると助かります。 あと、DBにアクセスする際のSQL命令の"@"の意味がよくわかりません。 例:SELECT sdate FROM Schedule WHERE sdate = @sdate 初歩的な質問で申し訳ありませんが、よろしくお願いします。

みんなの回答

  • onos
  • ベストアンサー率81% (127/155)
回答No.1

> あと、DBにアクセスする際のSQL命令の"@"の意味がよくわかりません。 パラメーター化クエリとかパラメタライズドクエリ、と呼ばれるものですね。 このようなクエリを使うと、SQL文の実行時にパラメーターが設定されている形式として正しいかどうかをチェックしてくれるので、SQLインジェクションが防止されます。 ということで、問題のメソッドのほうですが ・すでについているパラメーターがあるかもしれないのでクリア ・今レンダリングしようとしている日付を新しくパラメーターとして設定 ・その設定でSQL文を実行 ・SQLが返す値があったら、値の数だけリテラルコントロールを動的に生成して、  そこにsubjectの値を表示 という処理が行われています。

houkago-tea
質問者

お礼

なるほど。 明確なご回答ありがとうございました。 今日からまた課題に取り掛かれます! こんな質問に答えて頂き、ありがとうございました!

関連するQ&A

専門家に質問してみよう