ASP.NET構(gòu)建數(shù)據(jù)層學(xué)習(xí)筆記
ASP.NET構(gòu)建數(shù)據(jù)層適用于:
Microsoft ASP.NET 2.0
Microsoft Visual Web Developer 2005 Express Edition
歡迎您閱讀ASP.NET構(gòu)建數(shù)據(jù)層,該文章將為您從頭到尾展示創(chuàng)建一個(gè)應(yīng)用程序的完整過(guò)程。要構(gòu)建的初學(xué)者工具包稱(chēng)為 Media Share Library Starter Kit。Media Share Library Starter Kit 使您能輕松創(chuàng)建允許注冊(cè)用戶(hù)展示媒體項(xiàng)目(例如電影 DVD、音樂(lè) CD、書(shū)籍等等)集合的應(yīng)用程序,以便供其他注冊(cè)用戶(hù)借用。用戶(hù)能夠一并瀏覽使用該應(yīng)用程序的組所擁有的項(xiàng)目庫(kù),并向項(xiàng)目的注冊(cè)所有者請(qǐng)求借用某些特定項(xiàng)目。Media Share Library Starter Kit 的理念是,您能夠使用其提供的框架快速組織為更多人所共享的庫(kù)集合。
無(wú)論您是否使用初學(xué)者工具包,它本身就表明了在最新版本的 ASP.NET 2.0 中 Microsoft ASP.NET 所具備的更激動(dòng)人心的附加功能,這正是它的微妙所在。初學(xué)者工具包利用了大量的母版頁(yè)、新的代碼隱藏模型、新的服務(wù)器控件等等。本文重點(diǎn)介紹如何使用初學(xué)者工具包的一些激動(dòng)人心的、新的數(shù)據(jù)功能,例如使用新的 Microsoft SQL Server Express Edition 文件以及新數(shù)據(jù)源控件來(lái)執(zhí)行插入、更新和刪除數(shù)據(jù)的操作,這些功能將在 ASP.NET 2.0 中提供。
讓我們開(kāi)始自己動(dòng)手構(gòu)建初學(xué)者工具包的數(shù)據(jù)層吧,首先來(lái)學(xué)習(xí)使用新的 SQL Server Express Edition 構(gòu)建自己的數(shù)據(jù)存儲(chǔ)。
使用SQL Server Express
Microsoft 的 SQL Server 2005 Express Edition 是一個(gè)新的數(shù)據(jù)庫(kù)產(chǎn)品,它基于 Microsoft SQL Server 2005 成熟版本所使用的技術(shù)。SQL Server Express Edition 是 SQL Server 2005 的一個(gè)剪裁版本,只要使用它,您就不必使用其他數(shù)據(jù)庫(kù)文件(例如 Microsoft Access .mdb 文件)來(lái)構(gòu)建 ASP.NET 應(yīng)用程序的數(shù)據(jù)層了。
過(guò)去,許多 Web 開(kāi)發(fā)人員和業(yè)余愛(ài)好者發(fā)現(xiàn),使用 Access 文件作為應(yīng)用程序的數(shù)據(jù)存儲(chǔ)非常簡(jiǎn)單,這些文件不但易于安裝和實(shí)現(xiàn),而且易于和應(yīng)用程序的其余文件一起從一個(gè)位置復(fù)制到另一個(gè)位置。鑒于這個(gè)原因,Microsoft 通過(guò)新的 .mdf 文件擴(kuò)展名提供了 SQL Server Express Edition 文件,您能夠以處理上述 Access 文件的方式對(duì)它進(jìn)行處理。這些 .mdf 文件可通過(guò)與 Visual Studio 集成的卓越功能輕松創(chuàng)建,在 ASP.NET 應(yīng)用程序內(nèi)使用起來(lái)很簡(jiǎn)單,通過(guò) x-copy 將文件從一個(gè)位置復(fù)制到另一個(gè)位置也很容易,就好像只是 ASP.NET 應(yīng)用程序中的另一些文件一樣,通過(guò)它進(jìn)行部署可以說(shuō)是易如反掌。
不僅如此,使用方面的便利還有很多。新的 SQL Server Express 產(chǎn)品支持諸如 XML、VARCHAR(MAX) 等新的數(shù)據(jù)類(lèi)型,甚至支持用戶(hù)定義的數(shù)據(jù)類(lèi)型。
首先,我們來(lái)了解用于存儲(chǔ)用戶(hù)和角色信息的數(shù)據(jù)庫(kù)文件。
構(gòu)建ASPNETDB.MDF 文件
本文介紹的初學(xué)者工具包是處理注冊(cè)用戶(hù)的,因此您最想知道的可能就是初學(xué)者工具包存儲(chǔ)用戶(hù)和角色信息的位置。在初次構(gòu)建和運(yùn)行應(yīng)用程序時(shí),您會(huì)注意到,Visual Studio 2005 動(dòng)態(tài)創(chuàng)建了存儲(chǔ)這些信息的數(shù)據(jù)庫(kù)文件。
按 F5 鍵啟動(dòng)并構(gòu)建應(yīng)用程序之后,ASP.NET 將動(dòng)態(tài)創(chuàng)建所需的 ASPNETDB.MDF 數(shù)據(jù)庫(kù)文件,該文件用于為應(yīng)用程序存儲(chǔ)用戶(hù)的登錄信息和角色信息。
在 App_Data 文件夾中,除了 ASPNETDB.MDF 文件,還有 Library.mdf 文件,我們將在后面簡(jiǎn)要介紹此文件。如果文件夾中沒(méi)有此文件,需要按下 Visual Studio 解決方案資源管理器工具欄中的“刷新”按鈕。使用 Visual Studio 的優(yōu)點(diǎn)是,可直接通過(guò)它對(duì)此文件以及其他 SQL Server Express 數(shù)據(jù)庫(kù)文件執(zhí)行您所需的任何操作。在解決方案資源管理器中雙擊 ASPNETDB.MDF 文件,在 Visual Studio Server Explorer 中打開(kāi)該數(shù)據(jù)庫(kù)文件。
您不僅可以使用數(shù)據(jù)庫(kù)中包含的表,還可以使用數(shù)據(jù)庫(kù)圖表、視圖、存儲(chǔ)過(guò)程、函數(shù)、同義詞、類(lèi)型和程序集。該 ASPNETDB.MDF 文件屏幕快照顯示使用用戶(hù)登錄信息和角色時(shí)所需的所有表,以及與用戶(hù)關(guān)聯(lián)的配置文件信息。
我們將不修改該 ASPNETDB.MDF 文件,因?yàn)樗且\(yùn)行的 ASP.NET 引擎需要的一個(gè)文件。可以在該數(shù)據(jù)庫(kù)文件中只添加所需的新表,并僅從該數(shù)據(jù)庫(kù)文件處運(yùn)行整個(gè)應(yīng)用程序,但是,最佳做法是將您自定義的數(shù)據(jù)庫(kù)操作從默認(rèn)的 ASPNETDB.MDF 文件所執(zhí)行的操作中分離出來(lái)。那么,接下來(lái)我們將介紹如何創(chuàng)建 Library.mdf 數(shù)據(jù)庫(kù)文件。媒體共享庫(kù) (Media Share Library) 將使用該文件來(lái)存儲(chǔ)有關(guān)應(yīng)用程序所保存項(xiàng)目的所有信息,其中包括每個(gè)保存的項(xiàng)目是否處于借用狀態(tài)。
構(gòu)建 Library.mdf 文件
構(gòu)建下一層媒體共享庫(kù) (Media Share Library) 數(shù)據(jù)層的方法是構(gòu)建一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)文件,用它來(lái)保存應(yīng)用程序需要存儲(chǔ)的所有底層數(shù)據(jù)。該數(shù)據(jù)庫(kù)中實(shí)際存儲(chǔ)的是什么?嗯,事實(shí)上用戶(hù)需要存儲(chǔ)自己的媒體庫(kù)(DVD、CD、書(shū)籍等)以及有關(guān)項(xiàng)目借用狀態(tài)的信息,如果您看過(guò)第一篇介紹初學(xué)者工具包的 ASP.NET Jumpstart 文章,就不難理解這個(gè)問(wèn)題了。
要?jiǎng)?chuàng)建所需的數(shù)據(jù)庫(kù)文件,在 Visual Studio 解決方案資源管理器中右鍵單擊 App_Data 文件夾,在提供的菜單中選擇 Add New Item。此操作將啟動(dòng)“添加新項(xiàng)目”對(duì)話(huà)框。選擇該對(duì)話(huà)框中的 SQL 數(shù)據(jù)庫(kù)作為創(chuàng)建應(yīng)用程序所使用的文件類(lèi)型。請(qǐng)確保將該文件命名為 Library.mdf。
一旦創(chuàng)建該文件,App_Data 文件夾中即出現(xiàn)新的 Library.mdf 文件,雙擊該文件可在 Visual Studio Server Explorer 中打開(kāi)它,這一點(diǎn)與 ASPNETDB.MDF 文件一樣。
要?jiǎng)?chuàng)建第一張表,只需右鍵單擊服務(wù)器資源管理器中 Library.mdf 下的 Tables 文件夾,并在提供的菜單中選擇 Add New Table 即可。您需要為本文的應(yīng)用程序創(chuàng)建兩張表。第一張表命名為 MediaTypes,它將處理媒體共享庫(kù) (Media Share Library) 應(yīng)用程序所使用的自定義類(lèi)別。請(qǐng)記住,庫(kù)中存儲(chǔ)的每個(gè)項(xiàng)目都需要以某種方式進(jìn)行分類(lèi)(例如 DVD、CD、書(shū)籍等),而且這些類(lèi)別是根據(jù) MediaTypes 表的內(nèi)容動(dòng)態(tài)生成的。MediaTypes 表是要?jiǎng)?chuàng)建的一張簡(jiǎn)單的表。
創(chuàng)建表時(shí),只要提供有關(guān)列的一些簡(jiǎn)要信息,即可創(chuàng)建這些數(shù)據(jù)庫(kù)的列。
在創(chuàng)建數(shù)據(jù)庫(kù)中的信息表時(shí),通常情況下比較合適的做法是用唯一的關(guān)鍵字標(biāo)識(shí)表中的每一行。因此,MediaTypes 表將包含一個(gè)標(biāo)題為 MediaTypeId 的列,因?yàn)橐獮槊啃卸x一個(gè)絕對(duì)唯一的 ID 值,所以該列類(lèi)型為 int,而且不允許 Null 值。但是這不適用于列定義。下一步,右鍵單擊某行開(kāi)頭的灰色框,選擇所提供菜單中的 Set Primary Key。然后,該行開(kāi)頭會(huì)出現(xiàn)一個(gè)黃色的關(guān)鍵字。除此之外,請(qǐng)確保創(chuàng)建的每個(gè) ID 都用作標(biāo)識(shí)符,并且每個(gè) ID 都是唯一的。高亮顯示某列,您將能夠看到文檔窗口中定義的列屬性。在此屬性窗格中設(shè)置標(biāo)識(shí)說(shuō)明 (Identity Specification),以便表明 ID 唯一且用于標(biāo)識(shí)。
設(shè)置 MediaTypeId 列后,下一步是創(chuàng)建該表中的其他兩列:MediaTypeName (nvarchar(50)) 和 MediaComments (nvarchar(MAX))。瀏覽該表時(shí),不費(fèi)吹灰之力就能辨別每列在本應(yīng)用程序中的用途。如前所述,MediaTypeId 用作該表每行的標(biāo)識(shí)符。MediaType 是應(yīng)用程序?qū)嶋H呈現(xiàn)給最終用戶(hù)的類(lèi)別名,而且實(shí)際上應(yīng)用程序根本不使用 MediaComments,它只是允許開(kāi)發(fā)人員或數(shù)據(jù)庫(kù)管理員按需為每個(gè)類(lèi)別提供注釋。
一旦表就緒,請(qǐng)按 CTRL+S 來(lái)保存表定義。然后會(huì)出現(xiàn)一個(gè)對(duì)話(huà)框,提示您為新表命名。請(qǐng)確保將該表命名為 MediaTypes。
創(chuàng)建 MediaTypes 表后,再創(chuàng)建下一張表,該表用于存儲(chǔ)應(yīng)用程序中保存的所有庫(kù)項(xiàng)目。該表也指示這些項(xiàng)目是否為某人所借用,借用人是誰(shuí)以及何時(shí)歸還給所有者。
從該表定義中您會(huì)發(fā)現(xiàn),某些數(shù)據(jù)項(xiàng)來(lái)源于應(yīng)用程序所使用的其他表或數(shù)據(jù)庫(kù)。例如,UserName 列存儲(chǔ)的注冊(cè)用戶(hù)的用戶(hù)名。該值最初是通過(guò) ASP.NET 2.0 成員關(guān)系系統(tǒng)從 ASPNETDB.MDF 文件獲取的。此外,MediaType 列只是存儲(chǔ)了一個(gè)數(shù)字,該數(shù)字與前面創(chuàng)建的 MediaTypes 表所使用的某個(gè)唯一 ID 相關(guān)。
既然這兩張表已經(jīng)準(zhǔn)備就緒,下面我們來(lái)介紹應(yīng)用程序如何從這些表中提取并存儲(chǔ)數(shù)據(jù)。下面繼續(xù)介紹ASP.NET構(gòu)建數(shù)據(jù)層。#p#
使用新的數(shù)據(jù)源服務(wù)器控件提取和發(fā)送數(shù)據(jù)
通過(guò) .NET 提取數(shù)據(jù)庫(kù)數(shù)據(jù)(或?qū)?shù)據(jù)發(fā)回?cái)?shù)據(jù)庫(kù))有若干種方法。因此,必須找出一種最適合您的應(yīng)用程序和實(shí)際情況的數(shù)據(jù)檢索方案。ASP.NET 2.0 通過(guò)引入一系列全新的數(shù)據(jù)源服務(wù)器控件使這一過(guò)程變得十分簡(jiǎn)單。
新的 ASP.NET 2.0 數(shù)據(jù)源控件提供一種聲明方法,通過(guò)它可連接到數(shù)據(jù)存儲(chǔ)并檢索應(yīng)用程序所需的數(shù)據(jù)。使用新數(shù)據(jù)源控件的步驟比以往使用 ASP.NET 1.x 所采用的步驟更簡(jiǎn)單。
您可以任意使用 5 個(gè)新數(shù)據(jù)源服務(wù)器控件。一些新的數(shù)據(jù)源控件是專(zhuān)門(mén)為使用 Microsoft SQL Server、新的 Microsoft SQL Server Express Edition 數(shù)據(jù)庫(kù)文件、XML 文件等而設(shè)計(jì)的。這些數(shù)據(jù)源控件可以連接到指派的數(shù)據(jù)存儲(chǔ),檢索數(shù)據(jù),并執(zhí)行通過(guò)各種服務(wù)器控件屬性指定的任何數(shù)據(jù)操作。
使用 SqlDataSource 控件選擇數(shù)據(jù)
仔細(xì)觀察 Media Share Library Starter Kit 代碼,會(huì)發(fā)現(xiàn)其中多次使用了數(shù)據(jù)源控件以選擇、插入、更新或刪除 Library.mdf 數(shù)據(jù)庫(kù)文件中存儲(chǔ)的信息。我們首先來(lái)看一些簡(jiǎn)單的 Select 示例。
MainLibrary.aspx 頁(yè)(位于媒體共享庫(kù) (Media Share Library) 應(yīng)用程序的 Library 文件夾中)上有一個(gè)簡(jiǎn)單數(shù)據(jù)檢索的典型示例。該頁(yè)含有一個(gè) GridView 服務(wù)器控件,該控件顯示輸入到庫(kù)中的某一特定類(lèi)別的所有項(xiàng)目。最終用戶(hù)通過(guò)一個(gè)下拉列表控件完成類(lèi)別選擇,該控件位于顯示結(jié)果的 GridView 控件的正上方。那么類(lèi)別數(shù)據(jù)又是如何填充到下拉列表控件的?其實(shí),這是通過(guò)使用一個(gè) SqlDataSource 控件完成的,該控件從上文創(chuàng)建的 MediaTypes 表中提取類(lèi)別列表。一旦獲得類(lèi)別列表,就將其傳遞給下拉列表控件。首先,SqlDataSource 控件從 Library.mdf 數(shù)據(jù)庫(kù)文件中提取類(lèi)別列表。
這是一個(gè)相當(dāng)簡(jiǎn)單的 SqlDataSource 控件示例。與 ASP.NET 中的其他服務(wù)器控件一樣,控件內(nèi)必須首先設(shè)置一個(gè) ID 值和 runat="server"。下一個(gè)要注意的重要項(xiàng)目是 ConnectionString 屬性。該屬性通過(guò) <%$ ConnectionStrings:LibraryConnectionString %> 值指向 Web.config 文件中的一個(gè)位置。但是該值的含義沒(méi)有直接點(diǎn)明,其真正表示的意思是使用的值需要從 Web.config 文件的 <ConnectionStrings> 部分提取,即使用名為 LibraryConnectionString 的特定 <add> 節(jié)點(diǎn)內(nèi)的值。
創(chuàng)建 SqlDataSource 控件的 ConnectionString 屬性后,還需要留意 SelectCommand 屬性。該屬性接收 Select TSQL 命令,這些命令用于提取 Library.mdf 數(shù)據(jù)庫(kù)文件中特定表的數(shù)據(jù)。以本文為例,提取 MediaTypes 表的 MediaTypeName 和 MediaTypeId 列,按字母順序進(jìn)行排列后,再傳遞給本頁(yè)的下拉列表控件。
將選定的數(shù)據(jù)綁定到服務(wù)器控件
設(shè)置好 ConnectionString 和 SelectCommand 屬性后,即可將 SqlDataSource 控件綁定到頁(yè)面上的一個(gè)或多個(gè)控件。然而,本文示例只是將 SqlDataSource 控件綁定到 DropDownList1 這一個(gè)控件。
下拉列表通過(guò)使用 DataSourceID 屬性將自身綁定到 SqlDataSource1 控件的輸出,所有數(shù)據(jù)綁定服務(wù)器控件均可使用該屬性。提供給 DataSourceID 屬性的值就是 SqlDataSource 控件(本示例的 SqlDataSource1)中使用的 ID 值。下拉列表在該處有特殊的可用性需求 — 在文本字段和可選值字段中放置一個(gè)值。
我們將分別使用 MediaTypeId 和 MediaTypeName 的值作為 <option> 的值和顯示給最終用戶(hù)的值。DropDownList 服務(wù)器控件的使用是通過(guò) DataTextField 和 DataValueField 屬性的使用來(lái)完成的。
由于 DropDownList1 現(xiàn)在綁定到 SqlDataSource1 控件的輸出,因此頁(yè)面將動(dòng)態(tài)地提取輸出結(jié)果。
選擇帶有參數(shù)的數(shù)據(jù)
有時(shí)您必須選擇基于某一特定參數(shù)的數(shù)據(jù),即所謂的參數(shù)化查詢(xún)。例如,想要一份客戶(hù)數(shù)據(jù)庫(kù)中所有加拿大客戶(hù)的列表。這即是一個(gè)參數(shù)化查詢(xún)。您不想要所有客戶(hù)的列表,這樣的列表繁雜冗長(zhǎng)。如果將某個(gè)值(本示例為 Canada)傳遞給 Select 語(yǔ)句,將返回一個(gè)經(jīng)過(guò)篩選的結(jié)果集。
Media Share Library Starter Kit 中的 MainLibrary.aspx 頁(yè)上還有一個(gè) GridView 控件,該控件由另一個(gè) SqlDataSource 控件 (SqlDataSource2) 驅(qū)動(dòng),后者需要參數(shù)化查詢(xún)來(lái)獲取結(jié)果。本示例的 GridView 實(shí)際上由最終用戶(hù)通過(guò)選擇下拉列表控件(上文圖 10 所示)的項(xiàng)目來(lái)控制。如果最終用戶(hù)選擇下拉列表中的 DVD,那么在 Select 語(yǔ)句中將使用該值,GridView 控件只顯示返回的 DVD 類(lèi)別的庫(kù)項(xiàng)目。當(dāng)然,GridView 中顯示的數(shù)據(jù)完全由 SqlDataSource2 控件控制。
觀察該 SqlDataSource 控件,會(huì)發(fā)現(xiàn)它與我們?cè)谏衔目吹降?SqlDataSource1 控件之間有很多相似之處。盡管有相似之處,但是也有一些顯著的差別。最明顯的一點(diǎn)是 SelectCommand 值要長(zhǎng)得多。造成該結(jié)果的一個(gè)原因是要檢索 Media 表中的大量列值。另一個(gè)更有趣的原因源于命令中的 WHERE 語(yǔ)句。
WHERE ([MediaType] = @MediaType) ORDER BY [MediaName]
這行代碼表示的真正含義是,SqlDataSource 控件要選擇 Media 表中 MediaType 列值等于某個(gè)特定參數(shù)的所有已定義列,我們稍后將用 @MediaType 定義該參數(shù)。獲得這些值后,需要根據(jù) MediaName 列的值按字母順序排序。
以聲明方式定義參數(shù)
依據(jù)上文來(lái)看,稍后為 @MediaType 變量賦值很重要。賦值的方法有兩種 — 聲明方式或編程方式。首先回顧如何以聲明方式定義參數(shù)。
我們可以使用 SqlDataSource 控件的 <SelectParameters> 部分為 @MediaType 變量賦值,因?yàn)?Select 語(yǔ)句中至少有一個(gè)參數(shù)需要定義(請(qǐng)參看上文列表 4 中的示例)。除 <SelectParameters> 部分之外,SqlDataSource 控件還有 <DeleteParameters>、<FilterParameters>、<InsertParameters> 和 <UpdateParameters>。下列控件可以在 <SelectParameters> 部分內(nèi)嵌套使用:
<asp:Parameter> |
基本的參數(shù)占位符,可稍后定義。 |
<asp:ControlParameter> |
在獲取頁(yè)面上另一個(gè)服務(wù)器控件的值時(shí)使用。 |
<asp:CookieParameter> |
在需要獲取最終用戶(hù)的 cookie 鍵值時(shí)使用。 |
<asp:FormParameter> |
在接收來(lái)自窗體集合的值時(shí)使用。 |
<asp:ProfileParameter> |
在接收來(lái)自 Profile 對(duì)象的值時(shí)使用,該對(duì)象與提交請(qǐng)求的最終用戶(hù)相關(guān)聯(lián)。 |
<asp:QueryStringParameter> |
在接收請(qǐng)求的 URL 查詢(xún)字符串的鍵值時(shí)使用。 |
<asp:SessionParameter> |
在接收最終用戶(hù)會(huì)話(huà)對(duì)象的鍵值時(shí)使用。 |
我們通過(guò)使用 <asp:ControlParameter> 控件將列表 4 示例中的 @MediaType 值與 DropDownList1 服務(wù)器控件中的值關(guān)聯(lián)起來(lái)。
要從頁(yè)面上的 DropDownList1 控件獲取 @MediaType 所使用的值,ControlParameter 控件需要通過(guò)屬性 ControlID 將兩者關(guān)聯(lián)起來(lái)。提供給 ControlID 屬性的值必須為關(guān)聯(lián)控件的 ID 屬性值。后面的屬性 Name 指向參數(shù)化查詢(xún)中的真正變量名。這一點(diǎn)很重要,因?yàn)樾枰x的 Select 參數(shù)可能不止一個(gè)。雖然本示例僅有一個(gè)參數(shù),但是這種關(guān)聯(lián)仍然是必要的。因?yàn)槲覀兪褂玫氖且粋€(gè)下拉列表,所以需要定義 SqlDataSource 控件要使用下拉列表的哪一個(gè)屬性。例如,在關(guān)聯(lián)一個(gè)下拉列表控件時(shí),可以獲得諸如 SelectedIndex、SelectedItem 或 SelectedValue 屬性的值。因此,需要聲明要獲取的屬性。在 SqlDataSource 控件中定義的最后一個(gè)屬性是 Type 屬性。就是在這里對(duì)控件的值進(jìn)行真正意義上的類(lèi)型轉(zhuǎn)換(本示例轉(zhuǎn)換為 Int32)。
上述定義完成后,您就可以使用下拉列表控件來(lái)驅(qū)動(dòng) SqlDataSource 控件,并使用通過(guò)它提取的 Library.mdf 數(shù)據(jù)庫(kù)文件中 Media 表的值了。
以編程方式定義參數(shù)
除了聲明方式之外,還有另一種選擇,下面介紹以編程方式定義參數(shù)。如上文所示,與直接在 SqlDataSource 控件中使用不同,這種方式在代碼隱藏頁(yè)面中使用。
觀察 Default.aspx 頁(yè),它位于 Media Share Library Starter Kit 的 Library 文件夾,該頁(yè)會(huì)在您所有的或借用的項(xiàng)目上顯示警告。這些警告還會(huì)提供給參數(shù)化 select 查詢(xún)過(guò)程所使用的 SqlDataSource 控件。該 Select 命令如下所示:
SELECT [UserName], [MediaName], [MediaISBN], [DueDate] FROM [Media]
WHERE (([DueDate] < @DueDate) AND ([Borrower] = @Borrower) AND ([OnLoan] = @OnLoan)) ORDER BY [DueDate]
在完成這個(gè) Select 命令之前,必須為三個(gè)變量賦值 — @DueDate、@Borrower 和 @OnLoan。如果查看 Default.aspx 頁(yè)中的 SqlDataSource 控件聲明,您會(huì)發(fā)現(xiàn)這三個(gè)變量之中,只有兩個(gè)在 Select 命令中賦了值
上面定義的聲明參數(shù)列表只聲明了 @Borrower 和 @OnLoan 參數(shù)。列表中沒(méi)有 @DueDate 參數(shù),這是因?yàn)樵搮?shù)值會(huì)隨服務(wù)器當(dāng)前日期/時(shí)間的變化而動(dòng)態(tài)改變。這也是該參數(shù)需要以聲明方式定義的原因。
- SqlDataSource1.SelectParameters.Add("DueDate",
- TypeCode.DateTime, DateTime.Now.ToString())
在該行代碼中,SqlDataSource 控件通過(guò) Add() 方法添加一個(gè) SelectParameter,Add() 方法要求提供變量名、類(lèi)型和值,即本例中的 DueDate。對(duì)于該變量的值,我們只需提供服務(wù)器當(dāng)前日期/時(shí)間即可。
到此為止,SqlDataSource 控件已經(jīng)具備 Select 命令需要的所有三個(gè)參數(shù)。
盡管本文說(shuō)明的是 Select 命令的使用,但是不要忘了您還可以將此類(lèi)功能用于 Delete、Insert 和 Update 命令。
小結(jié)
本文為您介紹了ASP.NET構(gòu)建數(shù)據(jù)層。首先,我們介紹了在 SQL Server Express Edition 中如何直接構(gòu)建一個(gè)新的數(shù)據(jù)庫(kù)和表,然后介紹了 ASP.NET 2.0 數(shù)據(jù)源控件以及如何使用這些控件從創(chuàng)建的數(shù)據(jù)文件中提取所需的數(shù)據(jù)。ASP.NET Jumpstart將介紹如何使用 ASP.NET 2.0 提供的一些激動(dòng)人心的新控件。希望您能享受其中的樂(lè)趣,并祝您編程愉快!
【編輯推薦】