asp.net|資料|資料庫
前言:
第一次使用ASP.NET 2.0就被它強大的功能和超高的效率所吸引,原本繁雜的過程被簡化到無法置信的容易,而且據微軟的所言12月中文版的VS2005正式版將給我們帶來更強勁的風暴。對ASP.NET 2.0逐漸深入後,便產生了想把自己學習中發現的問題和體會與大家交流,遂有此文。聲明:本文所有示範樣本均基於Visual Web Developer 2005 Express Beta2,Visual Web Developer 2005 Express Edition Beta2 是一種簡便的、易學易用的開發工具,其重點專註於互連網應用開發。
1.ASP.NET 2.0資料庫開發的新特性:
與以前的版本相比,ASP.NET 2.0加入了更多的特性,使得開發人員工作效率、管理、擴充性和效能領域均有了大幅度的提高。
在開發效率上,ASP.NET 2.0使得一個典型的WEB應用程式的代碼量基本上減少了70%,甚至在一些簡單的程式中無須編寫任何代碼就可以實現你所要求的功能,既所謂的"0代碼"。這是因為ASP.NET 2.0 將常用的 Web 任務封裝到應用程式服務和控制項中,這些服務和控制項可方便地在網站之間重用。利用這些基本產生塊,較之以前的版本,現在實現許多應用所需的自訂代碼要少得多。
同時在ASP.NET 2.0 引入了許多新的伺服器控制項,能夠為資料訪問、登入安全、嚮導導航、菜單、樹視圖、門戶等提供功能強大的聲明性支援。這些控制項中,許多都利用了 ASP.NET 的核心應用程式服務,用於資料訪問、成員資格與角色,以及個人化等方案。
2.0 版中的新增功能如下:
· 資料來源控制項 -- ASP.NET 2.0 引入了聲明性資料來源控制項,這些控制項向頁上的資料繫結 UI 控制項公開來自後端儲存(例如 SQL 資料庫、中介層業務對象或 XML 檔案)的資料。資料來源控制項還公開諸如排序、分頁、緩衝、更新、插入和刪除資料等功能,UI 控制項能夠自動利用這些功能而無需代碼。
· 新的資料繫結控制項 -- 除 ASP.NET 1.x 版中的資料繫結控制項外,ASP.NET 還包括諸如 GridView、DetailsView、FormView、TreeView 和 Menu 等新的資料繫結 UI 控制項,可以自訂這些控制項以各種格式顯示資料。GridView、DetailsView 和 FormView 控制項還能自動利用資料來源功能,使得向資料驅動頁添加排序、分頁和更新操作非常容易。
· 資料控制項參數 -- 資料來源能夠使用 ASP.NET 2.0 中新的資料控制項參數對象從各種來源接受輸入參數。使用這些參數對象可以輕鬆地向參數化資料操作提供伺服器控制項屬性值、會話、應用程式、Cookie 和 querystring 欄位以及使用者設定檔屬性。使用這些參數,只需很少的自訂代碼或無需自訂代碼就能支援篩選和主/詳細資料方案。
· 改進的資料繫結文法 -- 對於在資料繫結模板中繫結控制項的常見方案,ASP.NET 中的 DataBinder.Eval 資料繫結文法已得到簡化。還可以在模板中將雙向資料繫結與控制項屬性關聯,以允許自動將值傳遞給資料來源更新、插入或刪除操作。對於分層的 XML 資料,ASP.NET 2.0 還包含一種基於 Xpath 的資料繫結文法。
· 使用 SQL Express 的本地檔案資料庫 -- 為簡化開發,ASP.NET 2.0 現在支援在應用程式中串連到作為本地檔案的 SQL Express 資料庫的能力,從而消除僅為了執行開發工作而向伺服器提供資料庫的需要。當然,您仍然能夠串連到基於伺服器的 SQL 資料庫。
下面是一些重要的資料繫結控制項和資料來源控制項的詳細的介紹:
·GridView:
這是ASP.NET 2.0中的一個新的資料繫結控制項,它是ASP.NET 1.x中的DataGrid控制項的後續繼承,並且在其基礎上做了許多改進。儘管在ASP.NET 1.x中DataGrid控制項已經可以滿足開發人員通過代碼來處理一些操作,像排序,分頁,編輯及刪除資料等。但是GridViwe控制項綁定到資料來源控制項時,它就可以自動進行排序,分頁,編輯及刪除資料的一系列處理。在功能上GridViwe控制項也超越了DataGrid控制項,GridViwe控制項可以支援多個關鍵字段,在UI介面上有了強大的使用者定製功能,而且它還給開發人員提供了一個新的取消和處理事件的模型。
·SqlDataSource:
SqlDataSource控制項代表一個通過ADO.NET串連到SQL資料庫提供者的資料來源控制項。就像其他的資料來源控制項一樣,SqlDataSource控制項可以被綁定到任何支援DataSourceID屬性的資料繫結控制項上。同時SqlDataSource擁有自我描述的能力(例如選擇,插入,更新,刪除,排序等),以至資料繫結控制項可以在這些能力被允許的情況下自動的實現選擇,插入,更新,刪除,排序等過程。SqlDataSource控制項可以讓你在建立資料庫連接和實現查詢時取代以前所需的大量ADO.NET代碼,這是因為這些資料的查詢操作已經直接被指定為該資料來源控制項的一個屬性。因為資料的查詢依然存在於頁面的代碼中,有時候我們也稱這是一種雙重模型。
SqlDataSource控制項通常主要是針對一些不太需要查詢大量資料庫小型的和個人網站,當我們進行一個資料流量較大的網站開發,我們就必須使用後面的ObjectDataSource控制項,這是一個綁定到中介層對象的針對大型企業開發的資料來源控制項。
資料來源控制項
資料來源控制項沒有呈現形式,而是表示特定的後端資料存放區,例如資料庫、業務對象、XML 檔案或 XML Web services。資料來源控制項還支援針對資料的豐富功能(例如排序、分頁、篩選、更新、刪除和插入),資料繫結 UI 控制項能夠自動使用這些功能。ASP.NET 2.0 包括以下現成的伺服器控制項:
名稱 |
說明 |
SqlDataSource |
支援綁定到 ADO.NET 提供者(例如 Microsoft? SQL Server、OLEDB、ODBC 或 Oracle。)表示的 SQL 資料庫。 |
ObjectDataSource |
支援綁定到中介層對象,例如資料訪問層或業務組件。 |
AccessDataSource |
支援綁定到 Microsoft? Access (Jet) 資料庫。 |
SiteMapDataSource |
支援綁定到 ASP.NET 2.0 網站導覽提供者公開的階層。 |
XmlDataSource |
支援綁定到 XML 檔案或文檔。 |
資料繫結控制項
資料繫結控制項是將資料作為標記向發出請求的用戶端裝置或瀏覽器呈現的 UI 控制項。資料繫結控制項能夠自動綁定到從資料來源公開的資料,並在頁請求生命週期中的適當時間擷取資料。這些控制項還可以選擇利用資料來源功能,例如排序、分頁、篩選、更新、刪除和插入。資料繫結控制項通過其 DataSourceID 屬性串連到資料來源控制項。您可能熟悉 ASP.NET 1.x 版中的一些資料繫結控制項,例如 DataGrid、DataList、Repeater 和諸如 DropDownList 這樣的清單控制項。ASP.NET 2.0 還包含幾個新的資料繫結控制項,例如:
名稱 |
說明 |
GridView |
以網格格式呈現資料。此控制項是 DataGrid 控制項的演變形式,並且能夠自動利用資料來源功能。 |
DetailsView |
在標籤/值對的表格中呈現單個資料項目,類似於 Microsoft? Access 中的表單檢視。此控制項也能自動利用資料來源功能。 |
FormView |
在由自訂模板定義的表單中一次呈現單個資料項目。在標籤/值對的表格中呈現單個資料項目,類似於 Microsoft? Access 中的表單檢視。此控制項也能自動利用資料來源功能。 |
TreeView |
在可展開的節點的分層樹視圖中呈現資料。 |
Menu |
在分層動態菜單(包括彈出式菜單)中呈現資料. |
下面我們結合GridView和SqlDataSource兩個控制項來實現一些最簡單的資料操作。我將給出一個詳細的例子,並且為大家進行詳細的講解。
這是一個最簡單的僅包含唯讀報表的資料驅動頁面,它顯示資料庫中的資料,但並不允許我們去更改其中的各個資料項目。首先我們必須設定好一個SqlDataSource控制項,然後串連到一個資料庫繫結控制項上,我們在這個樣本中是用GridView,指定GridView的DataSourceID屬性為上面SqlDataSource。
SQL Server 2000中Pubs資料庫的authors表,其結構如下:
SqlDataSource控制項的ConnectionString屬性指定一個資料庫連接字串,SelectCommand屬性是指定執行檢索的資料庫命令。連接字串可以在頁面代碼中直接指定,也可以採用一種新的運算式結構在Web.config.中檢索資料庫連接字串。
第一步,在"工具箱"的"資料"項下拖拽一個"GridView"控制項到首頁面上,放置滑鼠到該控制項上短暫的停留後,會出現一個小的標籤:
第二步,我們開啟下圖所示的"選擇資料來源"的下拉式清單:
第三步:如果你還沒有設定任何的SqlDataSource,可以選擇"建立資料來源"選項。出現如下圖的介面後:
我們選擇"資料庫"作為我們的資料來源。自動產生一個ID為"SqlDataSource1"的SqlDataSource資料來源控制項。
第四步:在首頁面產生了一個SqlDataSource資料來源控制項的同時,還顯示如下的視窗:
點擊"建立串連"按鈕,顯示的表單如下:
"伺服器名"為你本地的SQL Server上的一個執行個體,填寫好了,你就可以選擇2種登入到伺服器的方式:
Windows驗證和SQL Server驗證兩種,它們的區別我將在後面進行詳細的講解。我們在這裡先選擇Windows驗證的方式,在選擇"pubs"資料庫後點擊"測試連接"如果顯示串連成功後就表明我們已經串連到SQL Server伺服器上了。
第五步:單擊"確定"按鈕後,將顯示"配置資料來源"的表單,我們選擇"hoowoo.pubs.dbo"作為我們將要串連的資料庫。
第六步:由於我們希望將連接字串儲存到應用程式設定檔中,所以我們希望在web.config中保持這個連接字串。在這裡我們希望將連接字串儲存為一個別名:Pubs
第七步:選擇下圖的"authors"表來選擇我們所需要的資料,這裡我們選擇了所有的欄位。
完成上面的所以步驟後,我們在首頁面上的右鍵菜單上選擇"查看代碼",可以看到如下的代碼:
<%@ Page Language="C#" %> <html> <head id="Head1" runat="server"> <title>GridView Bound Fields</title> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" DataSourceID="SqlDataSource1"AutoGenerateColumns="False" runat="server"> <Columns> <asp:BoundField HeaderText="ID" DataField="au_id" ReadOnly="true" /> <asp:BoundField HeaderText="Last Name" DataField="au_lname" /> <asp:BoundField HeaderText="First Name" DataField="au_fname" /> <asp:BoundField HeaderText="Phone" DataField="phone" /> <asp:BoundField HeaderText="Address" DataField="address" /> <asp:BoundField HeaderText="City" DataField="city" /> <asp:BoundField HeaderText="State" DataField="state" /> <asp:BoundField HeaderText="Zip Code" DataField="zip" /> <asp:CheckBoxField HeaderText="Contract" DataField="contract" /> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT [au_id], [au_lname], [au_fname], [phone],[address],[city], [state], [zip], [contract] FROM [authors]" ConnectionString="<%$ ConnectionStrings:Pubs %>" /> </form> </body> </html> |
Web.Config中的代碼如下:
<?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <appSettings/> <connectionStrings> <add name="Pubs" connectionString="Data Source=hoowoo;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <compilation debug="false"/> <authentication mode="Windows"/> </system.web> </configuration> |
現在來重點分析這些代碼的意義:
"<asp:GridView ID="GridView1" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" runat="server">" |
資料繫結控制項通過其 DataSourceID 屬性串連到資料來源控制項,從而我們可以進行排序、分頁、篩選、更新、刪除和插入等一系列的操作。
"<Columns> <asp:BoundField HeaderText="ID" DataField="au_id" ReadOnly="true" /> <asp:BoundField HeaderText="Last Name" DataField="au_lname" /> <asp:BoundField HeaderText="First Name" DataField="au_fname" /> <asp:BoundField HeaderText="Phone" DataField="phone" /> <asp:BoundField HeaderText="Address" DataField="address" /> <asp:BoundField HeaderText="City" DataField="city" /> <asp:BoundField HeaderText="State" DataField="state" /> <asp:BoundField HeaderText="Zip Code" DataField="zip" /> <asp:CheckBoxField HeaderText="Contract" DataField="contract" /> </Columns>" |
"BoundField"和"CheckBoxField"均為要綁定的控制項類型,"HeaderText"是將要顯示在表格上欄位的名稱,而"DataField"則是我們要進行繫結資料欄位。
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT [au_id], [au_lname], [au_fname], [phone],[address],[city], [state], [zip], [contract] FROM [authors]" ConnectionString="<%$ ConnectionStrings:Pubs %>" /> |
SqlDataSource控制項中我們設定了資料庫的SelectCommand命令為"SELECT [au_id],[au_lname],[au_fname],[phone],[address] [city], [state], [zip], [contract] FROM [authors]"這正好和GridView所要綁定的控制項一一對應,這充分說明了資料繫結控制項和資料來源控制項的緊密聯絡。
細心的讀者可能會奇怪了,ConnectionString="<%$ ConnectionStrings:Pubs %>在SqlDataSource是表示什麼呢?這個問題就和我們為什麼需要Web.Config設定檔有很大的關聯了。Web.Config中設定了如下的節點:
<connectionStrings> <add name="Pubs" connectionString="Data Source=hoowoo;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> |
我們可以通過檢索Web.Config設定檔來取得資料庫連接字串別名"Pubs"的真正的含義是
"Data Source=hoowoo;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" Initial Catalog表明我們使用的是"pubs"資料庫。Integrated Security說明了我們採用的是Windows驗證方式。
最後的顯示如下: