經(jīng)驗(yàn)分享:ASP.NET數(shù)據(jù)庫(kù)應(yīng)用分析
ASP.NET數(shù)據(jù)庫(kù)在使用中有很多的優(yōu)勢(shì),這些已經(jīng)贏得了程序員們廣泛的青睞。現(xiàn)在,我們就具體來看看ASP.NET數(shù)據(jù)庫(kù)的應(yīng)用。
對(duì)于一個(gè)熟練的ASP開發(fā)者來說,ASP.NET數(shù)據(jù)庫(kù)的應(yīng)用不但簡(jiǎn)單,而且功能還很強(qiáng)大。很多Web開發(fā)者就是因?yàn)檫@一點(diǎn)而選擇ASP的,至今為止,他們一直認(rèn)為ASP.NET數(shù)據(jù)庫(kù)功能還不錯(cuò),完全可以滿足開發(fā)要求。
一、名字空間NameSpace
要使用ASP.NET數(shù)據(jù)庫(kù)的功能,不可能離開名字空間NameSpace的使用。什么是名字空間,簡(jiǎn)單一點(diǎn),名字空間就像Delphi中的控件,你必須將它們放入你的Form才能使用它們,同樣,如果你要使用ASP.NET數(shù)據(jù)庫(kù)的功能,你就必須先引用相應(yīng)的名字空間。ASP.NET數(shù)據(jù)庫(kù)的名字空間有這些:
- <%@ Import NameSpace="System.Data.SQL"%>
- <Script Language="VB" RunAt="Server">
- Function createdatasource()
- Dim conn AS SQLConnection
- Dim connstr As String
- Dim strsql AS String
- Dim sqlCmd AS SQLDataSetCommand
- Dim ds AS New DataSet
- '連接數(shù)據(jù)庫(kù)
- connstr=
- "Server=NHGA-D36KQ26TWB;DataBase=NorthWind; Pwd=;Uid=sa"
- conn= New SQLConnection(connstr)
- 'SQL語(yǔ)句
- strsql="Select * from Products "
- '建立DataSet
- sqlCmd=New SQLDataSetCommand(strsql,conn)
- '將表Products加入DataSet
- sqlCmd.FillDataset(ds,"Products")
- return ds.Tables("Products").DefaultView
- end Function
- '綁定數(shù)據(jù)函數(shù)
- sub BindGrid()
- DataGrid1.DataSource=CreateDataSource()
- DataGrid1.DataBind()
- End Sub
- '頁(yè)面登錄
- Sub Page_Load(Source AS Object,E AS EventArgs)
- CreatedataSource()
- BindGrid()
- End Sub
- </Script>
- <html>
- <head>
- <meta http-equiv="Content-Language" content="zh-cn">
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
- <meta name="ProgId" content="FrontPage.Editor.Document">
- <title>ASP.NET數(shù)據(jù)庫(kù)使用</title>
- </head>
- <body>
- <Form RunAt="Server">
- <ASP:DataGrid id="DataGrid1" RunAt="Server" />
- </Form>
- </body>
- </html>
以上是一個(gè)最簡(jiǎn)單的ASP.NET數(shù)據(jù)庫(kù)應(yīng)用,唯一功能就是列出NorthWind數(shù)據(jù)庫(kù)Products表的所有記錄。可以和ASP比較一下,發(fā)現(xiàn)這個(gè)程序是如此的簡(jiǎn)單。為了更好的了解數(shù)據(jù)庫(kù)應(yīng)用的基本框架,我們來看看這個(gè)數(shù)據(jù)庫(kù)應(yīng)用具體是怎樣實(shí)現(xiàn)的。
頁(yè)面登錄時(shí),調(diào)用CreateDataSource和BindGrid函數(shù),CreateDataSource函數(shù)連接數(shù)據(jù)庫(kù)并且建立DataView,BindGrid函數(shù)將數(shù)據(jù)綁定到DataGrid。有關(guān)這兩個(gè)函數(shù)的具體語(yǔ)句,代碼中均有說明。 #p#
二、基本數(shù)據(jù)庫(kù)應(yīng)用
有了以上模板,ASP.NET數(shù)據(jù)庫(kù)應(yīng)用的基本框架已經(jīng)有了,現(xiàn)在,我們需要在這個(gè)框架上作一些修改,使其更加符合我們的實(shí)際使用要求。
1.界面設(shè)置
如果我們呈現(xiàn)給訪問者的數(shù)據(jù)全部使用以上模板的界面,也未嘗不可。但是,誰(shuí)不希望自己的頁(yè)面美觀一點(diǎn)呢?還是以上代碼,只是修改DataGrid部分,數(shù)據(jù)庫(kù)部分不變。將程序中:
- <ASP:DataGrid id="DataGrid1" RunAt="Server" />
修改為:
- <ASP:DataGrid id="DataGrid1" RunAt="Server"
- BorderColor="black"
- BorderWidth="1"
- CellPadding="3"
- BackImageUrl=""
- BackColor="#FFCCCC"
- ForeColor="Black"
- HeaderStyle-BackColor="#CCCCFF"
- HeaderStyle-ForeColor="Blue"
- AlternatingItemStyle-BackColor="#F3f3f3"
- >
- </ASP:DataGrid>
在這個(gè)界面里面,我們?cè)O(shè)置了字體,每行背景,DataGrid背景等,我們現(xiàn)在一一分析:
- BorderColor="black"
- BorderWidth="1"
- CellPadding="3"
以上語(yǔ)句設(shè)置DataGrid的邊框?yàn)楹谏贿吙虼旨?xì)為1;單元格跨距為3。
- BackImageUrl="apictue.gif"
- BackColor="#FFCCCC"
- ForeColor="Black"
以上語(yǔ)句設(shè)置DataGrid的背景圖象為apicture.gif;背景顏色為#FFFFCC;字體顏色為黑色。
- HeaderStyle-BackColor="#CCCCFF"
- HeaderStyle-ForeColor="Blue"
以上語(yǔ)句設(shè)置DataGrid的Header屬性,背景顏色為#CCCCFF;字體顏色為藍(lán)色。
- AlternatingItemStyle-BackColor="#F3f3f3"
以上語(yǔ)句設(shè)置DataGrid每一行交替背景顏色為F3F3F3;這一語(yǔ)句在ASP里面實(shí)現(xiàn)很繁瑣,在這里,一句就解決。
2.數(shù)據(jù)分頁(yè)
ASP里面的數(shù)據(jù)分頁(yè)實(shí)在繁瑣,不得不花很多精力去寫代碼。一些程序員就是因?yàn)檫@一點(diǎn),如果數(shù)據(jù)不是太多干脆不分頁(yè),勉強(qiáng)應(yīng)付。現(xiàn)在我們?cè)僖膊灰獮閿?shù)據(jù)分頁(yè)煩惱了,將一下代碼加入DataGrid設(shè)置:
- AllowPaging="True"
- PageSize="5"
- PagerStyle-HorizontalAlign="Right"
- PagerStyle-NextpageText="下一頁(yè) >>"
- PagerStyle-PrevPageText="<< 上一頁(yè)"
這就是一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)分頁(yè),是不是比ASP簡(jiǎn)單得多?我們來仔細(xì)看一下代碼是怎樣的:
- AllowPaging="True"
以上代碼允許數(shù)據(jù)進(jìn)行分頁(yè),默認(rèn)是False。所以,如果你要數(shù)據(jù)分頁(yè),一定要加上這一句。
- PageSize="5"
PageSize和ASP中的一樣,表示每頁(yè)有多少記錄。
- PagerStyle-HorizontalAlign="Right"
以上語(yǔ)句表示分頁(yè)符在頁(yè)面的位置的右邊。
- PagerStyle-NextpageText="下一頁(yè) >>"
- PagerStyle-PrevPageText="<< 上一頁(yè)"
以上語(yǔ)句表示用“下一頁(yè)”、“上一頁(yè)”作為分頁(yè)符號(hào),如果不希望這樣,想直接用數(shù)字表示,去掉這兩句就可以了。
注意:與分頁(yè)有關(guān)的還有PageCount屬性,可以得到分頁(yè)的總數(shù)。
3.數(shù)據(jù)排序
數(shù)據(jù)排序不是在SQL語(yǔ)句里面就可以設(shè)定嗎,為什么還要專門來一個(gè)數(shù)據(jù)排序?SQL語(yǔ)句的數(shù)據(jù)排序只能服務(wù)器端設(shè)定,如果用戶希望按照自己的喜好排序怎么辦?ASP里面是沒有辦法解決的,現(xiàn)在,我們看看ASP.NET數(shù)據(jù)庫(kù)怎樣解決這個(gè)問題。
在DataGrid設(shè)置里面加入一下語(yǔ)句:
- AllowSorting="true"
- OnSortCommand="Sort_Grid"
***句表示DataGrid采用要求排序;第二句表示點(diǎn)擊排序以后的事件;我們來看看這個(gè)事件:
- Sub Sort_Grid(Sender As Object,E As DataGridSort CommandEventArgs)
- SortField=E.SortField
- DataGrid1.DataSource=CreateDataSource()
- DataGrid1.DataBind()
- End Sub
點(diǎn)擊排序以后,首先,設(shè)置排序字段為點(diǎn)擊的字段,如何重新顯示數(shù)據(jù)。
每一個(gè)字段名均是一個(gè)LinkButton(連接),點(diǎn)擊這個(gè)字段名,就可以按這個(gè)字段排序。需要注意的是,排序不是對(duì)當(dāng)前頁(yè)排序,而是對(duì)整個(gè)DataGrid排序。
4.數(shù)據(jù)編輯
數(shù)據(jù)庫(kù)操作除了數(shù)據(jù)瀏覽,***部分其實(shí)就是對(duì)數(shù)據(jù)的處理(增加、修改、刪除)。數(shù)據(jù)處理,ASP.NET數(shù)據(jù)庫(kù)和ASP沒有太多的區(qū)別,我們看一個(gè)增加數(shù)據(jù)的例子就可以了解ASP.NET數(shù)據(jù)庫(kù)編輯的實(shí)現(xiàn)了。
- Sub InsertRec()
- Dim conn AS SQLConnection
- Dim connstr As String
- Dim sqlinsertcmd AS SQLCommand
- Dim sqlinsert AS String
- connstr="Server=NHGA-D36KQ26TWB;DataBase=My Base;Pwd=;Uid=sa"
- conn= New SQLConnection(connstr)
- sqlinsert="Insert Into MyTable(title,name,content)Values (@title,@name,@content)"
- sqlinsertcmd=New SQLCommand(sqlinsert,conn)
- sqlinsertcmd.parameters.Add(New SQLParameter("@title", SQLDataType.varchar,20))
- sqlinsertcmd.parameters.Add(New SQLParameter("@name", SQLDataType.varchar,20))
- sqlinsertcmd.parameters.Add(New SQLParameter ("@content", SQLDataType.varchar,20))
- sqlinsertcmd.parameters.item("@title").value="Test3"
- sqlinsertcmd.parameters.item("@name").value="Test3"
- sqlinsertcmd.parameters.item("@content").value="Test3"
- conn.open()
- sqlinsertcmd.execute()
- End Sub
上面代碼中,首先創(chuàng)建一個(gè)ASP.NET數(shù)據(jù)庫(kù)連接,然后建立了一個(gè)插入語(yǔ)句,此插入語(yǔ)句使用了以@開頭的參數(shù),這一點(diǎn)可能與ASP稍有差別。使用參數(shù)之前,必須先創(chuàng)建參數(shù),并要說明參數(shù)的數(shù)據(jù)類型。如何打開連接,執(zhí)行插入語(yǔ)句就可以了。
以上我們?cè)O(shè)計(jì)到了ASP.NET數(shù)據(jù)庫(kù)操作中常用的部分,基本可以實(shí)現(xiàn)我們一般編程要求。但是,如果要全面了解ASP.NET數(shù)據(jù)庫(kù)的功能,以上顯然是不夠的,這需要我們更加不斷地學(xué)習(xí)其他ASP.NET數(shù)據(jù)庫(kù)的知識(shí),融會(huì)貫通。
【編輯推薦】