資源描述:
《aspnet35從入門到精通9-12.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、第9章ASP.NET操作數(shù)據(jù)庫(kù)通過(guò)對(duì)ADO.NET的基本講解,以及講解了一些數(shù)據(jù)源控件的基本用法后,本章將介紹一些ASP.NET操作數(shù)據(jù)庫(kù)的高級(jí)用法,包括使用SQLHelper,以及數(shù)據(jù)源控件對(duì)數(shù)據(jù)的操作。本章是對(duì)前面的數(shù)據(jù)庫(kù)知識(shí)的一種補(bǔ)充和提升。9.1使用ADO.NET操作數(shù)據(jù)庫(kù)上一章中介紹了ADO.NET的基本概念、ADO.NET的對(duì)象,以及如何使用ADO.NET。使用ADO.NET能夠極大的方便開(kāi)發(fā)人員對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作而無(wú)需關(guān)心數(shù)據(jù)庫(kù)底層之間的運(yùn)行,ADO.NET不僅包括多個(gè)對(duì)象,同樣包括多種方法,這些方法都可以用來(lái)執(zhí)行開(kāi)發(fā)人員指定的SQL語(yǔ)句,但是這些方法實(shí)現(xiàn)過(guò)程又不盡相同,本節(jié)
2、將介紹ADO.NET中數(shù)據(jù)的操作方法。9.1.1使用ExecuteReader()操作數(shù)據(jù)庫(kù)使用ExecuteReader()操作數(shù)據(jù)庫(kù),ExecuteReader()方法返回的是一個(gè)SqlDataReader對(duì)象或OleDbDataReader對(duì)象。當(dāng)使用DataReader對(duì)象時(shí),不會(huì)像DataSet那樣提供無(wú)連接的數(shù)據(jù)庫(kù)副本,DataReader類被設(shè)計(jì)為產(chǎn)生只讀、只進(jìn)的數(shù)據(jù)流。這些數(shù)據(jù)流都是從數(shù)據(jù)庫(kù)返回的。所以,每次的訪問(wèn)或操作只有一個(gè)記錄保存在服務(wù)器的內(nèi)存中。相比與DataSet而言,DataReader具有較快的訪問(wèn)能力,并且能夠使用較少的服務(wù)器資源。DataReader對(duì)象
3、提供了“游標(biāo)”形式的讀取方法,當(dāng)從結(jié)果中讀取了一行,則“游標(biāo)”會(huì)繼續(xù)讀取到下一行。通過(guò)Read方法可以判斷數(shù)據(jù)是否還有下一行,如果存在數(shù)據(jù),則繼續(xù)運(yùn)行并返回true,否則返回false。示例代碼如下所示。stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";SqlConnectioncon=newSqlConnection(str);con.Open();//打開(kāi)連接stringstrsql="select*frommynews";//SQL查詢語(yǔ)句SqlCommandcmd=newSqlCommand(str
4、sql,con);//初始化Command對(duì)象SqlDataReaderrd=cmd.ExecuteReader();//初始化DataReader對(duì)象while(rd.Read()){Response.Write(rd["title"].ToString());//通過(guò)索引獲取列}DataReader可以提高執(zhí)行效率,有兩種方式可以提高代碼的性能,一種是基于序號(hào)的查詢;第二種情況則是使用適當(dāng)?shù)腉et方法來(lái)查詢。一般來(lái)說(shuō),在數(shù)據(jù)庫(kù)的設(shè)計(jì)中,需要設(shè)計(jì)索引鍵或主鍵來(lái)標(biāo)識(shí),在主鍵的設(shè)計(jì)中,自動(dòng)增長(zhǎng)類型是經(jīng)常使用的,自動(dòng)增長(zhǎng)類型通常為整型,所以基于序號(hào)的查詢可以使用DataReader,示例代碼
5、如下所示。stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";//設(shè)置連接字串SqlConnectioncon=newSqlConnection(str);//創(chuàng)建連接對(duì)象con.Open();//打開(kāi)連接stringstrsql="select*frommynewswhereid=1orderbyiddesc";//按標(biāo)識(shí)查詢SqlCommandcmd=newSqlCommand(strsql,con);//創(chuàng)建Command對(duì)象SqlDataReaderrd=cmd.ExecuteReader();//創(chuàng)
6、建DataReader對(duì)象while(rd.Read())//遍歷數(shù)據(jù)庫(kù){Response.Write(rd["title"].ToString());//讀取相應(yīng)行的信息}當(dāng)使用ExecuteReader()操作數(shù)據(jù)庫(kù)時(shí),會(huì)遇到知道某列的名稱而不知道某列的號(hào)的情況,這種情況可以通過(guò)使用DataReader對(duì)象的GetOrdinal()方法獲取相應(yīng)的列號(hào)。此方法接收一個(gè)列名并返回此列名所在的列號(hào),示例代碼如下所示。stringstr="server='(local)';database='mytable';uid='sa';pwd='sa'";//創(chuàng)建連接字串SqlConnectionc
7、on=newSqlConnection(str);//創(chuàng)建連接對(duì)象con.Open();//打開(kāi)連接stringstrsql="select*frommynewswhereid=1orderbyiddesc";//創(chuàng)建執(zhí)行SQL語(yǔ)句SqlCommandcmd=newSqlCommand(strsql,con);//創(chuàng)建Command對(duì)象SqlDataReaderrd=cmd.ExecuteReader();//創(chuàng)建DataReade