如果你是一個經驗豐富的ASP/ADO開發員但又沒有嘗試過.NET,那麼最好現在就開始試一試。為了讓你體會到.NET,我們將把微軟Access資料庫(你也可以SQL Server或者Oracle資料庫替代)串連到互連網並檢索和顯示某些資料。這個例子即需要Information Internet Services(IIS)也需要.NET架構。你可以在這兒下載.NET架構。如果你想試用免費的APS.NET開發環境,那麼可以從Web Matrix下載它。
對伺服器控制項的介紹
動態伺服器頁面(Active Server Page,ASP)是微軟第一個用於串連資料庫和Web的Web技術。ASP.NET完全是其傳統語言(即ASP)的重寫。你可以同時使用這兩者,這是因為兩者檔案的副檔名相區別(.NET頁使用的是.aspx副檔名,而ASP使用.asp副檔名)。
你在ASP.NET中寫的大多數代碼將在Web伺服器上運行,但返回到客戶的僅僅是HTML。幸好,.NET提供了許多與標準HTML控制項相似的新控制項,如下拉式列表和文字框。表A列出了最常用的伺服器(server)控制項。
表 A
常見server控制項
控制項 功能
<asp:Button id="button1" Text="Press" runat="server" /> 在頁面上建立一個標準按鈕
<asp:Calendar runat="server" /> 建立日曆(calendar)
<asp:DropList id="list1" runat="server"> 建立一個下拉式列表
<asp:ListBox id="listbox" rows="4" runat="server"> 建立基本欄表框
<asp:TextBox id="txtbox" runat="server" /> 建立標準文字框
.NET伺服器控制項有一個優點,即它是建立在Web伺服器上(而不是像HTML那樣在頁面中建立控制項)。因此,它們可以在發送到客戶之前進行處理。例如,你既可以在頁中也可以在伺服器端進行內容驗證。這也就意味著你可以在頁中驗證內容,然後在伺服器端重新進行驗證。
在大多數情況下,你可以通過簡單的添加組件的方法來建立一個.NET控制項:
runat="server"
與之對應的HTML元素代碼如下:
<asp:control_name id="controlID" runat="server" />
有些開發工具的用法甚至更簡單。例如,Visual Studio .NET可以讓你通過拖放Web頁上的控制項來建立伺服器控制項。
除了這些伺服器端的標準HTML控制項,ASP.NET還提供了一套驗證控制項(validation controls):
RequiredFieldValidation控制項請求一個數值。
CompareValidator控制項比較兩個控制項中的數值,如當使用者被要求兩次輸入電子郵件地址時,用來驗證兩次輸入是否相同。
RangeValidator控制項用來判斷條目值是否在一個範圍之內。
RegularExpressionValidator控制項用Regex來驗證控制項輸入。
CustomValidator控制項用來讓你輸入驗證碼。
Validation Summary用來顯示一個頁面所用到的所有正確的驗證的清單。
使用ADO.NET
你或許熟悉ADO,不過ADO.NET卻是一種全新的語言。但是沒有關係,這兩者之間有足夠多的相似之處,學會如何使用新的對象並不是困難的事。串連到資料庫一共有三個步驟:
1. 匯入一個.NET名字空間來建立串連。
2.建立一個ADO.NET DataReader對象來擷取資料。
3.建立一個ADO.NET Repeater對象來顯示資料。
對.NET來說,名字空間是一個新的概念,所以在ADO中沒有和它對應的東西。在ADO中,串連是通過提供字串和一個Connection或者Command對象來建立起來的。DataReader對應於ADO的Recordset;而Reperter是一個server控制項,它用來在一個模板的基礎上顯示資料。
建立ADO.NET串連
為了從資料庫中檢索資料,你需要ADO.NET。如果你熟悉IIS和Web檔案層次,那麼你可能不需任何協助就可以建立一個例子。你也可以按照我們的示範過程去做,先把Northwind(一個Access資料庫例子)拷貝到你的本地硬碟中。我們的例子在一個名為nettest的Web檔案夾下。拷貝粘貼(或者輸入)下面的代碼到一個文字編輯器中並把它儲存為nettest.aspx。
現在,匯入一個.NET名字空間,這樣你就可以使用OLEDB資料庫了:
<%@ Import Namespace="System.Data.OleDb" %>
PageLoad事件將執行串連到Northwind資料庫的代碼,Server.mappath將返回包含該資料庫的實體路徑,如代碼清單A所示。
連接字串
如果你想串連到SQL Server(用一個OLEDB串連),你可以使用下面的語句:
"Provider=sqloledb;Data Source=Martin;Initial Catalog=NorthWind;Integrated Security=SSPI;"
如果你用的是Oracle,你可以用下面的語句:
"Provider=msdaora;Data Source=OracleDataBase;User Id=YourUserName;Password=YourPassword;"
connectionstrings.com提供了許多關於串連的資訊,其中包含了每種可能情況下的連接字串。
建立ADO.NET對象
下一步就是建立一個DataReader對象,它用來儲存你希望顯示的資料。下面的代碼使用了Command對象的ExecuteReader方法,這樣就建立了一個儲存了Northwind客戶資料庫中所有記錄的DataReader對象。
cnn.Open()
sql="SELECT CompanyName, ContactName, Address, City FROM Customers"
cnn=New OleDbCommand(sql,cnn)
dbread=cnn.ExecuteReader()
用Reaperter控制項來顯示資料
現在,通過綁定上一步建立的DataReader對象,你就可以用一個Reperter控制項來顯示資料。Reaperter控制項可以讓你建立一個簡單的模板(例如,HTML表),對查詢所返回的每行資料都重複這個操作。
用HerderTemplate塊來建立初始的表結構;資料將出現在ItemTemplate(表的行和列)塊中。例如,下面的代碼為我們的客戶資料建立一個表頭,它用來指示早先SQL語句所返回的欄位:
<HeaderTemplate>
<table border="1" width="100%">
<tr>
<th>CompanyName</th>
<th>ContactName</th>
<th>Address</th>
<th>City</th>
</tr>
</HeaderTemplate>
與其它的ASP.NET對象不同,Repeater對象沒有現成的布局(layout)和樣式;你必須定義你自己的布局和樣式。返回資料的每一行都顯示在ItemTemplate塊中。下面的指令碼中每一個欄位都包含了一個單元(cell)(在HTML表中):
<ItemTemplate>
<tr>
<td><%#Container.DataItem("CompaName")%></td>
<td><%#Container.DataItem("ContactName")%></td>
<td><%#Container.DataItem("Address")%></td>
<td><%#Container.DataItem("City")%></td>
</tr>
</ItemTemplate>
模板代碼在HTML的body標籤中而在指令碼定義之外——雖然你不能從上面的例子中看出這一點。
瀏覽.NET頁
清單B中的代碼用來在瀏覽器中顯示客戶資料(用HTML表模板顯示各個資料條目)。
把這些指令碼複製粘貼到任何一個文字編輯器中,並儲存為.aspx格式的檔案。然後把該檔案另存或者拷貝到Web根目錄下(本例的根目錄為wwwroot\nettest)。啟動你的瀏覽器並輸入合適的地址,這樣開啟了這個檔案。當瀏覽器載入該檔案後(如圖A所示),瀏覽器將顯示一個簡單的HTML網頁,其中包含了SQL語句的請求所返回的資料。
圖A
瀏覽器中的.NET頁面
你還可以改進頁面的外觀。例如,通過添加其它模板塊來改變每行的顏色。AlternatingItem.Template塊可以改變每一個表單元的背景顏色。下面的指令碼會把單元的背景改成黃色(FFFF00):
<AlternatingItemTemplate>
<tr bgcolor="#FFFF00">
<td><%#Container.DataItem("companyname")%></td>
<td><%#Container.DataItem("contactname")%></td>
<td><%#Container.DataItem("address")%></td>
<td><%#Container.DataItem("city")%></td>
<td><%#Container.DataItem("Region")%></td>
</tr>
</AlternatingItemTemplate>
為了對其它所有行起作用,把AlternatingItemTemplate塊放到ItemTemplate塊之後。
小節
儘管.NET並不是特別新鮮的東東,但如果你還沒有實現從傳統ASP到ASP.NET的跳躍,那麼現在開始也不遲。如果你在ASP和ADO領域有著豐富的經驗,那麼這個轉換將會相當的簡單。