ASP.NET2.0輕松實現數據庫應用開發
前言:
第一次使用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 包括以下現成的服務器控件:
數據綁定控件
數據綁定控件是將數據作為標記向發出請求的客戶端設備或瀏覽器呈現的 UI 控件。數據綁定控件能夠自動綁定到從數據源公開的數據,并在頁請求生命周期中的適當時間獲取數據。這些控件還可以選擇利用數據源功能,例如排序、分頁、篩選、更新、刪除和插入。數據綁定控件通過其 DataSourceID 屬性連接到數據源控件。您可能熟悉 ASP.NET 1.x 版中的一些數據綁定控件,例如 DataGrid、DataList、Repeater 和諸如 DropDownList 這樣的列表控件。ASP.NET 2.0 還包含幾個新的數據綁定控件,例如:
下面我們結合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"作為我們將要連接的數據庫。
第七步:選擇下圖的"authors"表來選擇我們所需要的數據,這里我們選擇了所有的字段。
完成上面的所以步驟后,我們在主頁面上的右鍵菜單上選擇"查看代碼",可以看到如下的代碼:
Web.Config中的代碼如下:
現在來重點分析這些代碼的意義:
數據綁定控件通過其 DataSourceID 屬性連接到數據源控件,從而我們可以進行排序、分頁、篩選、更新、刪除和插入等一系列的操作。
"BoundField"和"CheckBoxField"均為要綁定的控件類型,"HeaderText"是將要顯示在表格上字段的名稱,而"DataField"則是我們要進行綁定的數據字段。
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中設置了如下的節點:
我們可以通過檢索Web.Config配置文件來取得數據庫連接字符串別名"Pubs"的真正的含義是
"Data Source=hoowoo;Initial Catalog=pubs;Integrated Security=True" providerName="System.Data.SqlClient" Initial Catalog表明我們使用的是"pubs"數據庫。Integrated Security說明了我們采用的是Windows驗證方式。
最后的顯示如下:
第一次使用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"作為我們將要連接的數據庫。
![]() |
第七步:選擇下圖的"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驗證方式。
最后的顯示如下:
![]() |