ASP.NET數(shù)據(jù)庫程序開發(fā)步驟
一、 簡介
在2005年11月7 日,微軟正式發(fā)行了.NET 2.0(包括ASP.NET 2.0),Visual Studio 2005和SQL Server 2005。所有這些部件均被設(shè)計為可并肩獨立工作。也就是說,ASP.NET版本1.x和版本2.0可以安裝在同一臺機器上;你可以既有Visual Studio.NET 2002/2003和Visual Studio 2005,同時又有SQL Server 2000和SQL Server 2005。而且,微軟還在發(fā)行Visual Studio 2005和SQL Server 2005的一個 Express式的SKU。注意,該Express版并不擁有專業(yè)版所有的特征。
2.0除了支持1.x風(fēng)格的數(shù)據(jù)存取外,自身也包括一些新的數(shù)據(jù)源控件-它們使得訪問和修改數(shù)據(jù)庫數(shù)據(jù)極為輕松。使用這些數(shù)據(jù)源控件時,你只需簡單地添加該控件到ASP.NET頁面并通過這些控件的屬性來配置連接串和SQL查詢即可。然后,通過把數(shù)據(jù)Web控件的DataSourceID屬性設(shè)置為數(shù)據(jù)源控件的ID,該數(shù)據(jù)源控件就能被綁定到一個數(shù)據(jù) Web控件(如GridView)上?,F(xiàn)今,必須靠編寫代碼來創(chuàng)建連接,創(chuàng)建命令,指定SQL查詢,檢索一個DataReader或DataSet,并且把它綁定到數(shù)據(jù)Web控件的日子已經(jīng)過去了。這些步驟能夠通過使用聲明性數(shù)據(jù)源控件來代替。(當(dāng)然,你還能通過使用你的1.x代碼中的熟悉的步驟編程地存取數(shù)據(jù)。)
在本文中我們將看一下怎樣連接和顯示來自ASP.NET數(shù)據(jù)庫程序。具體地說,我們將討論怎樣使用編程和聲明性方法來存取數(shù)據(jù),以及分析通過GridView控件來顯示數(shù)據(jù)的基本操作。
二、 在Visual Studio 2005中操作數(shù)據(jù)庫
當(dāng)你安裝Visual Studio 2005的任何版本時,你總是被詢問是否你也想安裝SQL Server 2005 Express版本。如果你選擇Yes,這將安裝你的開發(fā)包中的SQL Server 2005 Express版本-注意,在此你正在安裝Visual Studio 2005!(SQL Server 2005 Express版本可以與SQL Server的其它版本一起安裝,包括SQL Server 2000和SQL Server 2005的其它版本。)
如果你在當(dāng)前工程中使用SQL Server 2000,那么你可以通過企業(yè)管理器來以最舒適的方式操作數(shù)據(jù)庫。盡管你仍能使用企業(yè)管理器來操作SQL Server 2000,或使用SQL Server 2005的管理Studio來操作你的SQL Server 2005數(shù)據(jù)庫;但是,你也能通過Visual Studio 2005的數(shù)據(jù)連接來管理這些數(shù)據(jù)庫。我提及這些是因為對于SQL Server 2005 Express版本來說,不存在一個象SQL Server 2000的企業(yè)管理器或SQL Server 2005的管理 Studio這樣的GUI工具;代之的是,你必須通過Visual Studio 2005來創(chuàng)建和管理你的SQL Server 2005 Express版本數(shù)據(jù)庫。
提示 管理SQL Server 2005 Express版本數(shù)據(jù)庫
如果你有任何其它除 Express以外的SQL Server 2005版本,你可以在你的機器上安裝客戶端工具,它包括管理Studio-管理SQL Server 2005數(shù)據(jù)庫的GUI工具。如果你安裝了這個工具,你還可以使用它來管理SQL Server 2005 Express版本數(shù)據(jù)庫。
![]() 圖1 |
為了通過Visual Studio 2005來管理一個數(shù)據(jù)庫,請選擇到Server Explorer;在其上,你將找到一個數(shù)據(jù)連接結(jié)點(見上圖的快照)。你可以通過在數(shù)據(jù)連接結(jié)點上單擊鼠標(biāo)右鍵來添加新的數(shù)據(jù)庫連接并且選擇"Add Connection"。這將會調(diào)出一個對話框提示你一些信息,如數(shù)據(jù)庫服務(wù)器、認(rèn)證信息、使用什么數(shù)據(jù)庫等。如果你在自己的機器上安裝了SQL Server 2005 Express版本,那么即缺省地通過使用名為SQL Express的實例安裝了這個數(shù)據(jù)庫。因此,要連接到的服務(wù)名將是YourMachineName\SQL Express或.\SQL Express。除了連接到一個現(xiàn)有數(shù)據(jù)庫外,你還可以通過在數(shù)據(jù)連接結(jié)點上單擊鼠標(biāo)右鍵并且選擇創(chuàng)建新的SQL Server數(shù)據(jù)庫來創(chuàng)建一個新的數(shù)據(jù)庫。
一旦一個數(shù)據(jù)庫被添加到該數(shù)據(jù)連接選項卡上,你就可以通過適當(dāng)?shù)奈募A來添加、刪除或修改數(shù)據(jù)表,存儲過程,視圖等。為了創(chuàng)建一新的數(shù)據(jù)表或存儲過程,右擊適當(dāng)?shù)奈募A并且選擇"Add New X"菜單選項;為了修改一現(xiàn)有數(shù)據(jù)表、存儲過程或視圖,雙擊之即可。這將把它們調(diào)用到Visual Studio中-在此你可以據(jù)需要修改它。你也可以觀察和修改在單個數(shù)據(jù)表中的數(shù)據(jù)-這是通過右擊一個數(shù)據(jù)表名并且選擇"顯示數(shù)據(jù)表數(shù)據(jù)"來實現(xiàn)的。
三、 添加一數(shù)據(jù)庫到App_Data文件夾
除了通過數(shù)據(jù)連接選擇卡添加現(xiàn)有數(shù)據(jù)庫外,你還可以添加一個站點特定的數(shù)據(jù)庫到該網(wǎng)站的App_Data文件夾下。App_Data是一新的,保留在 ASP.NET 2.0中的文件夾-它被設(shè)計來存儲數(shù)據(jù)有關(guān)的內(nèi)容,包括SQL數(shù)據(jù)庫文件(.mdf文件)、Access數(shù)據(jù)庫文件(.mdb文件)、XML文件等。從一個ASP.NET網(wǎng)站工程,你可以輕松地創(chuàng)建并且添加一新的SQL Server 2005 Express數(shù)據(jù)庫到你的工程-通過右擊Solution Explorer中的App_Data文件夾并且選擇"Add New Item"。然后,從"Add New Item"對話框(顯示如下)中,選擇添加一新的SQL數(shù)據(jù)庫。
![]() 圖2 |
如果你想跟隨本文的步驟,那么請在App_Data文件夾下創(chuàng)建一個稱為Customers.mdf的SQL Server 2005 Express數(shù)據(jù)庫。然后,添加一個數(shù)據(jù)表到這個稱為Customers的數(shù)據(jù)庫-用下面字段列:CustomerID(一個自動增加的主鍵字段), Name,City,State和ZipCode。然后,通過VS 2005添加一些記錄到這個數(shù)據(jù)表。
另外,你還能添加現(xiàn)有 Access數(shù)據(jù)庫文件甚至SQL Server 2000數(shù)據(jù)庫文件。(注意:為了添加一現(xiàn)有SQL Server 2000 .mdf文件,你將需要確定它是第一次從企業(yè)管理器上分離;為此,在企業(yè)管理器上右擊數(shù)據(jù)庫名字,再選擇"All Tasks"并且選擇"Detach數(shù)據(jù)庫"。一旦你分離開該數(shù)據(jù)庫并且把它添加到ASP.NET數(shù)據(jù)庫程序,你就可以通過企業(yè)管理器重新依附它。)
四、 把SqlDataSource控件連接到數(shù)據(jù)庫
現(xiàn)在,既然我們看到了怎么創(chuàng)建并且通過Visual Studio的接口來使用數(shù)據(jù)庫;下面,讓我們把注意力轉(zhuǎn)到從一個ASP.NET 2.0 web頁面訪問和顯示來自一數(shù)據(jù)庫的數(shù)據(jù)上。ASP.NET 2.0包括了幾個新的數(shù)據(jù)源控件-它們的唯一目的是提供到數(shù)據(jù)的聲明性存取。共有五個內(nèi)置的數(shù)據(jù)源控件-它們都能夠在Visual Studio中的工具箱的"數(shù)據(jù)"部分找到(請見下邊的屏幕快照)。
![]() 圖3 |
◆SqlDataSource-用于檢索和修改來自于一個關(guān)系數(shù)據(jù)庫的數(shù)據(jù)。這里的"Sql"并不意味著這種數(shù)據(jù)源只與微軟SQL Server一起工作;而是可以與其它任何一種關(guān)系數(shù)據(jù)庫一起工作:SQL Server,Access,Oracle,等等。如果你在連接到一個SQL Server數(shù)據(jù)庫,那么控件將會非常聰明地在內(nèi)部啟用SqlClient類。
◆AccessDataSource-用于檢索和修改來自于一個Access數(shù)據(jù)庫文件的數(shù)據(jù)。你可能想知道,如果SqlDataSource能夠與Access數(shù)據(jù)庫文件一起工作,那么為什么還存在這個控件呢?其實,這個Access數(shù)據(jù)源控件使得你更容易地連接到一個Access數(shù)據(jù)庫-你只要指定到Access數(shù)據(jù)庫的.mdb文件的路徑即可。注意在使用SqlDataSource時,你需要使用一完全限定的指定數(shù)據(jù)提供者的連接串。
◆ObjectDataSource-用于通過一個商業(yè)對象來檢索和修改數(shù)據(jù)。理想地,你的ASP.NET應(yīng)用程序包括一組類-它形成中間層(而不是讓ASP.NET頁直接操作數(shù)據(jù)庫)。如果你有如此的結(jié)構(gòu),那么可以使用ObjectDataSource來查詢中間層。
◆XmlDataSource-用于檢索來自一XML文件的數(shù)據(jù)。
◆SiteMapDataSource-用于提供只讀存取定義在站點地圖中的站點結(jié)構(gòu)。這個控件在當(dāng)你想要在一個TreeView或Menu控件中顯示一個站點的結(jié)構(gòu)時使用。
在本文中,我們將只討論Sql數(shù)據(jù)源控件,并且僅分析其基本功能。
首先,讓我們添加一個Sql數(shù)據(jù)源控件到你的ASP.NET頁面。從設(shè)計視圖中,Sql數(shù)據(jù)源控件包含一個"靈敏標(biāo)簽"-它列舉出它的常用功能。該 "Configure Data Source"靈敏標(biāo)簽鏈接將激活一個向?qū)?它將一步步引導(dǎo)你通過整個的配置數(shù)據(jù)源的過程。這個向?qū)е饕腥齻€步驟(和一個可選的"子步驟"):
1. 選擇你的數(shù)據(jù)連接-在第一步中,我們需要指定連接到什么數(shù)據(jù)庫。這個屏幕包含在App_Data文件夾中數(shù)據(jù)庫的一個下拉列表和在數(shù)據(jù)連接選項卡中的一個下拉列表。還有一個"New Connection"按鈕-你可以點擊它,如果你想要連接到一個不在這些位置之一中的數(shù)據(jù)庫。如果你繼續(xù)下去,可以從下拉列表框中選擇 Customers.mdf選項。
子步驟:如果這是你添加連接的第一次,你將會被提示是否你想要把連接串保存到Web.config之中;而且如果這樣的話,應(yīng)該是連接串的名字。如果你繼續(xù)下去,我選擇用名字CustomersConnectionString把連接串保存到Web.config中。
2. 設(shè)置Select語句-下一步是指定你想要返回什么記錄,應(yīng)用什么樣的條件語句以及返回數(shù)據(jù)的排序順序。為此,你可以通過使用向?qū)磉x擇一個數(shù)據(jù)表或視圖并且選擇返回哪一列,或你可以手工地輸入一個SELECT語句。無論哪一種方法,都是讓Sql數(shù)據(jù)源控件返回來自Customers數(shù)據(jù)表的所有的列-換句話說,讓它實現(xiàn)"SELECT * FROM Customers"。
3. 查詢測試-你可以針對數(shù)據(jù)庫運行你的SELECT查詢以得到返回數(shù)據(jù)的一個預(yù)覽。請自由地點擊"Test查詢"按鈕;你應(yīng)該看見所有的來自該Customers數(shù)據(jù)表的所有記錄。
一旦你配置好SqlDataSource,請拿出一點時間看一下Source視圖并且檢查一下為Sql數(shù)據(jù)源控件所使用的聲明性標(biāo)記:
- <asp:SqlDataSource ID="SqlDataSource1" runat="server"
- ConnectionString="<%$ ConnectionStrings:CustomersConnectionString %>"
- SelectCommand="SELECT * FROM [Customers]">
- </asp:SqlDataSource>
有幾點要注意:首先,ConnectionString屬性使用了新的句法<%$ ... %>。這個句法從Web.config文件中檢索ConnectionStrings節(jié)的值的CustomersConnectionString值。換句話說,它從Customers數(shù)據(jù)庫中獲取連接串-該串是我們在Sql數(shù)據(jù)源控件的向?qū)У淖硬襟E中保存下來的;其次,SELECT查詢語句是在控件的 SelectCommand屬性中指定的。
這些數(shù)據(jù)源控件其自身只與數(shù)據(jù)一起工作。他們不顯示數(shù)據(jù)。如果你通過你的瀏覽器訪問這個 ASP.NET頁面,你將發(fā)現(xiàn)沒有產(chǎn)生輸出。為了觀察由我們剛才創(chuàng)建的Sql數(shù)據(jù)源控件所返回的數(shù)據(jù),我們需要添加一個數(shù)據(jù)Web控件。對于本文來說,讓我們使用GridView控件-你也可以在工具箱的"數(shù)據(jù)"節(jié)中找到它。該GridView是ASP.NET 1.x的DataGrid控件的"老大哥"-它提供了一些新的特性。在本文中,我們只分析到GridView的簡單的數(shù)據(jù)綁定。
現(xiàn)在,我們把一個GridView控件拖動到你的ASP.NET頁面上。從設(shè)計視圖中,該GridView的靈敏標(biāo)簽包括一個"Choose Data Source"選項并且有一個下拉列表的所有的數(shù)據(jù)源控件在該頁面上。把這個下拉列表設(shè)置為SqlDataSource1-即是我們剛添加的Sql數(shù)據(jù)源控件的ID。一旦做完這些,該GridView將自動地有一個BoundFields添加到它上面-對于由數(shù)據(jù)源所返回的每一列(該GridView的 BoundField等價于DataGrid中的BoundColumn)。通過GridView的靈敏標(biāo)簽來設(shè)置"Choose Data Source"下拉列表就可以把GridView的DataSourceID屬性設(shè)置為所選擇數(shù)據(jù)源控件的ID。
就這么多,不需要寫一句代碼!下面是通過一瀏覽器觀看該GridView時的一個屏幕快照。
![]() 圖4 |
通過使用GridView和Sql數(shù)據(jù)源控件,我們就能夠在30秒內(nèi)從一個空白頁轉(zhuǎn)到一個顯示數(shù)據(jù)庫數(shù)據(jù)表的內(nèi)容的頁面。事實上,我們可以在另一個30秒內(nèi)完成把分頁、雙向排序、刪除和編輯支持添加到該GridView上,現(xiàn)在且不多談!)
五、 編程連接到一數(shù)據(jù)庫
如我們前面所見,使用一個SqlDataSource檢索信息非常快捷,但是如果你想要編程地存取數(shù)據(jù)又會怎樣呢?或者,也許你已經(jīng)有了現(xiàn)成的代碼-該代碼將取得你想要的精確數(shù)據(jù)并且據(jù)需要進行管理;并且一旦完成,即修改你將要在一個GridView中所顯示的數(shù)據(jù)。沒有問題,你可以就象在1.x中一樣地在2.0中存取數(shù)據(jù)-通過創(chuàng)建一個到數(shù)據(jù)庫的連接,創(chuàng)建一個命令,指定查詢,填充一個DataReader或DataSet,然后使用該控件的DataSource 屬性和DataBind()方法把結(jié)果綁定到數(shù)據(jù)Web控件。
下列代碼顯示出一個ASP.NET頁面的Page_Load事件處理器-它編程地把Customers數(shù)據(jù)庫數(shù)據(jù)表的內(nèi)容綁定到GridView控件gvCustomers上:
- Protected Sub Page_Load(ByVal sender As Object, _
- ByVal e As System.EventArgs) Handles Me.Load
- If Not Page.IsPostBack Then
- 'Start by determining the connection string value
- Dim connString As String = ConfigurationManager.
ConnectionStrings(connStringName).ConnectionString- '創(chuàng)建一個SqlConnection實例
- Using myConnection As New SqlConnection(connString)
- '指定SQL查詢
- Const sql As String = "SELECT * FROM Customers"
- '創(chuàng)建一個SqlCommand實例
- Dim myCommand As New SqlCommand(sql, myConnection)
- '取回一個DataSet
- Dim myDataSet As New DataSet
- '創(chuàng)建一個SqlDataAdapter查詢
- Dim myAdapter As New SqlDataAdapter(myCommand)
- myAdapter.Fill(myDataSet)
- '把DataSet綁定到GridView
- gvCustomers.DataSource = myDataSet
- gvCustomers.DataBind()
- '關(guān)閉連接
- myConnection.Close()
- End Using
- End If
- End Sub
在此,要注意幾點:為了取得連接串,我們可以參考Web.config中的連接串設(shè)置-使用句法為
ConfigurationManager.ConnectionStrings (connStringName).ConnectionString。其中,connStringName的值應(yīng)該是在Sql數(shù)據(jù)源控件向?qū)?(CustomersConnectionString)的子步驟中指定的值。另外注意,Visual Basic 8(2.0中使用的VB版本)現(xiàn)在支持Using關(guān)鍵字-這是在前面的版本中僅適于C#的一個語言特點。
編程地存取數(shù)據(jù)和輸出結(jié)果等同于使用Sql數(shù)據(jù)源控件的情況。
六、 結(jié)論
在本文中,我們分析了在Visual Studio 2005中使用ASP.NET數(shù)據(jù)庫程序的情形。我們討論了怎樣通過Visual Studio管理數(shù)據(jù)庫,以及怎樣通過App_Data文件夾來添加網(wǎng)站特定的數(shù)據(jù)庫。最后,我們分析了怎樣使用Sql數(shù)據(jù)源控件和編程的方式來存取數(shù)據(jù)。當(dāng)使用一個數(shù)據(jù)源控件時,通過設(shè)置GridView的DataSourceID屬性來把數(shù)據(jù)綁到一個GridView控件上;當(dāng)編程地訪問該數(shù)據(jù)時,通過把數(shù)據(jù)賦值給GridView的DataSource屬性和調(diào)用GridView的DataBind()方法來實現(xiàn)把數(shù)據(jù)綁定到GridView。 (后一種方法遵循在ASP.NET 1.x中使用的模式來綁定數(shù)據(jù)到一個DataGrid。)不管使用哪一種方式來訪問數(shù)據(jù),最終的結(jié)果,如在一用戶瀏覽器中所見的,皆是相同的。
【編輯推薦】