[ホーム] - [Windows 2003 FAQ 一覧] - [ASPを使用し、Webページからデータベースへのアクセス]



作成日:2004/10/11
更新日:2022/03/10
対象:Windows 2003

ASPを使用し、Webページからデータベースへのアクセス





ASP(Active Server Page)を使用して Web ページからデータベースへアクセスする方法を紹介します。
(*)Windows Server 2003 時代の古い情報です。

Webフォームのデータ連結の仕組みにより、Webフォーム上のコントロールに対してデータの表示を簡単に実現することは可能です。しかしこれは一方向のみです。更新するにはその他の処理が必要です。ただ書き戻すほど複雑な処理が必要とされないよう工夫されています。

(1)準備
Windows サーバを用意します。本サンプルでは以下が導入されているものとします。
・Windows 2000
・IIS ver5以降
・.NET Framework
・Visual Studio.net (開発環境なので、その他クライアント上に導入しても良い)

(2)新しいプロジェクトを作成します。テンプレートには「ASP.NET Web アプリケーション」を指定します。

(3)データアダプタ・データセットを作成します。

Webページフォームからデータベースにアクセスするには以下の方法があります
・データセットを使用
・SQLステートメントあるいはストアドプロシージャを発行

今回は分かりやすいようにデータセットを使用します。
・ウイザードを使用しデータアダプタを作成します。
(本サンプルではNorthwind、テーブルは「Categories」を選択します。)

データベースの読み取り、書き込みに必要なSQL ステートメントを設定します。

ウイザードの途中で、データベースへアクセスするSQLステートメントを生成します。
例:
SELECT CategoryID, CategoryName, Description
FROM Categories

・データセットを作成します。
「SQLDataAdapter1」が選択された状態で「データ」「データセットの作成」を選択します。
例としてデータセット名にdsCategoriesという名前を付けます。

(3)DataGridコントロールの追加
ツールボックス上の「Webフォーム」から「DataGrid」を選択し、Webフォーム上にドラッグします。
"プロパティビルダを使用"でデータソースを指定することにより、データセットとDataGridを関連付けます。

データソース:dsCategories1
データメンバ:Categories
データキーフィールド:CategoryID

(4)DataGridへのデータ表示
データセットにデータがロードされても、DataGridには自動的に表示されません。
ページのロード時に明示的に指定する必要があります。
Page_Loadイベントに以下のとおり指定します。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
SqlDataAdapter1.Fill(dsCategories1)
If Not IsPostBack Then
DataGrid1.DataBind()
End If
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

(5)イベントハンドラの追加
デフォルトでは各行に「編集」「更新」「キャンセル」ボタンが表示されません。表示されるには「プロパティビルダ」
の「使用可能な列」で設定します。

追加したらそれぞれのイベントハンドラを作成します。

・EditCommand のイベントハンドラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
DataGrid1.EditItemIndex = e.Item.ItemIndex
DataGrid1.DataBind()
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

・CancelCommandのイベントハンドラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
DataGrid1.EditItemIndex=-1
DataGrid1.DataBind()
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

・UpdateCommand
取得された行のindexを取得し、更新された行を識別します。

Dim key As String=DataGrid1.DataKeys(e.Item.ItemIndex).ToString()

渡されたItemオブジェクトのindexを取得して、更新された行を認識します。

Dim categoryName, categoryDescription As String
Dim tb As TextBox
tb = CType(e.Item.Cells(2).Controls(0), TextBox)
categoryName = tb.Text
tb = CType(e.Item.Cells(3).Controls(0), TextBox)
categoryDescription = tb.Text

データセット内の対応する行を検索します。FindByメソッドを使用します。

Dim r As dsCategoriesRow
r=DsCategories1.Categories.FindByCategoryID(key)

r.CategoryName=categoryName
r.Descrittion=categoryDescription

最後にデータセット内の変更内容をデータベースで更新します。

SqlDataAdapter1.Update(DsCategories1)
DataGrid1.DataBind()

編集モードを解除しデータを連結します。

DataGrid1.EditItemIndex=-1
DataGrid1.DataBind()


まとめると以下のとおりとなります。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
Dim key As String=DataGrid1.DataKeys(e.Item.ItemIndex).ToString()
Dim categoryName, categoryDescription As String
Dim tb As TextBox
tb = CType(e.Item.Cells(2).Controls(0), TextBox)
categoryName = tb.Text
tb = CType(e.Item.Cells(3).Controls(0), TextBox)
categoryDescription = tb.Text

Dim r As Dim r As dsCategories.CategoriesRow
r=DsCategories1.Categories.FindByCategoryID(key)

r.CategoryName=categoryName
r.Description() = categoryDescription

SqlDataAdapter1.Update(DsCategories1)
DataGrid1.DataBind()

DataGrid1.EditItemIndex=-1
DataGrid1.DataBind()
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

最後にサーバ上から以下を実行し、正常に編集・更新可能なことを確認します。

http://localhost/WebApplication1/WebForm1.aspx







(ご注意) 本サイト内の内容を使用して発生したいかなる時間的損害、金銭的損害あるいはいかなる損害に対して、いかなる人物も一切の責任を負いません。あくまでも個人の判断で使用してください。 本ページは独自に調査をしたアンオフィシャル(非公式)な内容です。内容に誤りがある可能性や仕様変更により内容が不正確になる可能性があります。 本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。)


Copyright(c) TOOLJP.COM 1999-2022

[Windows 2003 FAQ 一覧に戻る]