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