版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章
數(shù)據(jù)訪問(wèn)和數(shù)據(jù)綁定
本章學(xué)習(xí)目標(biāo)ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)ADO.NET數(shù)據(jù)庫(kù)連接數(shù)據(jù)綁定控件LinQ綁定技術(shù)用LINQ實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)5.1ADO.NET數(shù)據(jù)訪問(wèn)5.1.1ADO.NET概述5.1.2建立數(shù)據(jù)庫(kù)連接5.1.3連線模式訪問(wèn)數(shù)據(jù)庫(kù)5.1.4離線模式訪問(wèn)數(shù)據(jù)5.1.1ADO.NET概述ADO.NET的名稱起源于ADO(ActiveXDataObjects),是一個(gè)COM組件庫(kù),供了平臺(tái)互用性和可伸縮的數(shù)據(jù)訪問(wèn)。ADO.NET是一組用于和數(shù)據(jù)源進(jìn)行交互的面向?qū)ο箢悗?kù)。通常情況下,ADO.NET允許和不同類型的數(shù)據(jù)源以及數(shù)據(jù)庫(kù)進(jìn)行交互,可以是數(shù)據(jù)庫(kù),也可以是文本文件、Excel表格或者XML文件,并且集成了語(yǔ)言集成查詢(LINQ)功能。ADO.NET的體系結(jié)構(gòu)ADO.NET主要的類包括有:Connection:數(shù)據(jù)庫(kù)連接對(duì)象Command:執(zhí)行數(shù)據(jù)操作命令Parameter:數(shù)據(jù)操作命令中的參數(shù)DataReader:以只讀方式讀取數(shù)據(jù)Transaction:用以實(shí)現(xiàn)事務(wù)DataAdapter:為數(shù)據(jù)庫(kù)容器加載數(shù)據(jù)庫(kù),將更新后的數(shù)據(jù)傳回?cái)?shù)據(jù)庫(kù)DataSet:數(shù)據(jù)容器,可以容納多個(gè)DataTable和關(guān)系DataTable:數(shù)據(jù)容器,由DataRow和DataColumn構(gòu)成DataRow:DataTable中一行記錄DataColumn:DataTable中的列DataView:為DataTable建立多種視圖DataRelation:表示多個(gè)DataTabele之間的關(guān)系Constraint:表示DataTable的主鍵和外鍵約束5.1.2建立數(shù)據(jù)庫(kù)連接OLEDBConnection:用于OLEDB的數(shù)據(jù)庫(kù)執(zhí)行連接SqlConnection:用于對(duì)SQLServer數(shù)據(jù)庫(kù)執(zhí)行連接OdbcConnection:用于支持ODBC的數(shù)據(jù)庫(kù)執(zhí)行連接OracleConnection:用于對(duì)Oracle數(shù)據(jù)庫(kù)執(zhí)行連接本小節(jié)中主要講解
關(guān)于SQLServer數(shù)據(jù)庫(kù)連接連接不同的數(shù)據(jù)庫(kù),ADO.NET中提供了不同的類。建立SQLServer數(shù)據(jù)庫(kù)連接操作設(shè)置數(shù)據(jù)連接字符串,創(chuàng)建SqlConnection對(duì)象,創(chuàng)建成功打開(kāi)數(shù)據(jù)連接關(guān)閉數(shù)據(jù)連接連接字符串屬性使用windows身份驗(yàn)證的連接字符串stringConStr="server=(local)\\SQLEXPRESS;DataBase=test;integratedsecurity=SSPI“server表示運(yùn)行SQLSever的計(jì)算機(jī)名,如果數(shù)據(jù)是express版的,要加在計(jì)算機(jī)名后加上\\SQLEXPRESS,本地可以用local替換,DataBase表示所使用的數(shù)據(jù)庫(kù)名使用SQLServer身份驗(yàn)證的連接字符串stringConStr=“server=(local)\\SQLEXPRESS;userID=sa;pwd=sa123;DataBase=test;”server同上,userID為連接數(shù)據(jù)庫(kù)的用戶名,pwd為連接數(shù)據(jù)庫(kù)密碼。注:為了安全,一般采用windows身份驗(yàn)證連接字符串,或在加密Web.config文件中的連接字符串。SqlConnection類SqlConnection類,用來(lái)連接到數(shù)據(jù)庫(kù)和管理數(shù)據(jù)庫(kù)事務(wù),其常用屬性如下:SqlConnection常用的方法[例5-1]應(yīng)用SqlConnection連接數(shù)據(jù)庫(kù)案例要點(diǎn):1)建立連接字符串publicstaticstringsqlStr="server=localhost;user=sa;pwd=sa123456;database=Test";2)創(chuàng)建SqlConnection對(duì)象SqlConnectionconStr=newSqlConnection(sqlStr);3)在按鈕的點(diǎn)擊事件中,分別打開(kāi)或關(guān)閉數(shù)據(jù)連接conStr.Open();//打開(kāi)數(shù)據(jù)連接conStr.Close();//關(guān)閉數(shù)據(jù)連接詳見(jiàn)書[例5-1]5.1.3連線模式訪問(wèn)數(shù)據(jù)庫(kù)使用SqlDataReader對(duì)象讀取數(shù)據(jù)庫(kù)的一般步驟:創(chuàng)建連接數(shù)據(jù)庫(kù)打開(kāi)數(shù)據(jù)庫(kù)連接使用SqlCommand對(duì)象的ExecuteReader方法執(zhí)行CommandText中的命令,并把返回的結(jié)果放SqlDataReader對(duì)象中。處理數(shù)據(jù)庫(kù)查詢結(jié)果關(guān)閉數(shù)據(jù)庫(kù)SqlDataReader對(duì)象使用SqlDataReader對(duì)象時(shí)的注意事項(xiàng)如下:讀取數(shù)據(jù)時(shí),SqlConnection對(duì)象必須處于打開(kāi)狀態(tài)必須通過(guò)SqlCommand對(duì)象的ExecuteReader()方法,產(chǎn)生SqlDataReader對(duì)象的實(shí)例只能向下順序讀取記錄,且無(wú)法直接獲知讀取記錄的總數(shù)SqlDataReader對(duì)象管理的查詢結(jié)果是只讀的。使用SqlDataReader對(duì)象時(shí)的注意事項(xiàng)(1)讀取數(shù)據(jù)時(shí),SqlConnection對(duì)象必須處于打開(kāi)狀態(tài)。(2)必須通過(guò)SqlCommand對(duì)象的ExecuteReader()方法,產(chǎn)生SqlDataReader對(duì)象的實(shí)例。(3)只能按向下的順序逐條讀取記錄,不能隨機(jī)讀取,且無(wú)法直接獲知讀取記錄的總數(shù)。(4)SqlDataReader對(duì)象管理的查詢結(jié)果是只讀的,不能修改。[例5-2]應(yīng)用SqlDataReader進(jìn)行連線模式訪問(wèn)數(shù)據(jù)案例要點(diǎn):1)建立連接,打開(kāi)數(shù)據(jù)庫(kù)連接,同例5-12)
通過(guò)SqlConnection對(duì)象,創(chuàng)建SqlCommand對(duì)象SqlCommandcmd=conStr.CreateCommand();3)設(shè)置查詢語(yǔ)句
cmd.CommandText="SELECT*FROMbookInfo";4)執(zhí)行查詢語(yǔ)句,將查詢結(jié)果放入SqlDataReader對(duì)象SqlDataReaderreader=cmd.ExecuteReader();5)讀出SqlDataReader對(duì)象中的數(shù)據(jù)while(reader.Read()){stringname=reader.GetString(reader.GetOrdinal("name"));intISDN=reader.GetInt32(reader.GetOrdinal("ISDN"));}6)關(guān)閉數(shù)據(jù)連接注意:在讀出SqlDataReader對(duì)象中的數(shù)據(jù)之前,不能關(guān)閉數(shù)據(jù)連接詳見(jiàn)書[例5-2][例5-2]應(yīng)用SqlDataReader進(jìn)行連線模式訪問(wèn)數(shù)據(jù)5.1.4離線模式訪問(wèn)數(shù)據(jù)離線模式訪問(wèn)數(shù)據(jù),主要與DataAdapter和DataSet兩個(gè)類有關(guān)。使用DataAdapter的過(guò)程中,連接的打開(kāi)和關(guān)閉是自動(dòng)完成的。DataAdapter對(duì)象通常稱為數(shù)據(jù)適配器,作用是作為數(shù)據(jù)源與DataSet對(duì)象之間的橋梁,提供了雙向的數(shù)據(jù)傳輸機(jī)制,可以將查詢結(jié)果集傳送到DataSet對(duì)象的數(shù)據(jù)表中,也可以執(zhí)行插入、更新、刪除,更新數(shù)據(jù)源。本節(jié)以SQLServer為例。離線訪問(wèn)數(shù)據(jù)對(duì)象模型屬性說(shuō)
明SelectCommand獲取或設(shè)置用來(lái)從數(shù)據(jù)源刪除數(shù)據(jù)行的SQL命令,屬性值必須為CommandInsertCommand獲取或設(shè)置將數(shù)據(jù)行插入數(shù)據(jù)源的SQL命令,屬性值為Command對(duì)象,使用原則與DeletCommand屬性一樣DeleteCommand獲取或設(shè)置用來(lái)從數(shù)據(jù)源刪除數(shù)據(jù)行的SQL命令,屬性值必須為Command對(duì)象,并且此屬性只有在調(diào)用Update方法且從數(shù)據(jù)源刪除數(shù)據(jù)行時(shí)使用,其主要用途是告知DataAdapter對(duì)象如何從數(shù)據(jù)源刪除數(shù)據(jù)行UpdateCommand獲取或設(shè)置用來(lái)從數(shù)據(jù)源選取數(shù)據(jù)行的SQL命令,屬性值為Command對(duì)象
SqlDataAdapter類的主要屬性SqlDataAdapter類的主要方法方法名說(shuō)明Dispose()釋放由Component占用的資源Equals(Object)確定指定的Object是否等于當(dāng)前的ObjectFill()填充DataSet或DataTableFinalize()在通過(guò)垃圾回收將Component回收之前,釋放非托管資源并執(zhí)行其他清理操作GetType()獲取當(dāng)前實(shí)例的TypeUpdate()為DataSet中每個(gè)已插入、已更新或已刪除的行調(diào)用相應(yīng)的INSERT、UPDATE或DELETE語(yǔ)句[例5-3]應(yīng)用DataAdapter、DataSet對(duì)象進(jìn)行離線模式查詢數(shù)據(jù)案例要點(diǎn):1)創(chuàng)建SqlDataAdapter對(duì)象stringcon_Str=“server=DESKTOP-QKGAT36;user=sa;pwd=sa123456;database=Test”;//設(shè)置連接字符串stringsql=“SELECT*FROMBook_Info”;//設(shè)置查詢語(yǔ)句SqlDataAdapteradptr=newSqlDataAdapter(sql,con_Str);2)新建DataSet對(duì)象,通過(guò)SqlDataAdapter對(duì)象
加載數(shù)據(jù)DataSetDS=newDataSet();
adptr.Fill(DS,"tt");[例5-3]應(yīng)用DataAdapter、DataSet對(duì)象進(jìn)行離
線模式查詢數(shù)據(jù)3)
通過(guò)DataSet創(chuàng)建DataTableReader對(duì)象DataTableReaderrdr=DS.CreateDataReader();4)
從DataTableReader對(duì)象中讀出數(shù)據(jù)記錄while(rdr.Read())
{for(inti=0;i<rdr.FieldCount;i++)
{Label1.Text+=rdr.GetName(i)+":"+
rdr.GetValue(i)+" ";
}//讀出字段名、字段值Label1.Text+="<br/>";
}詳見(jiàn)書[例5-3]5.2數(shù)據(jù)綁定技術(shù)與綁定控件5.2.1數(shù)據(jù)綁定基礎(chǔ)5.2.2數(shù)據(jù)源控件5.2.3數(shù)據(jù)綁定控件5.2.1數(shù)據(jù)綁定基礎(chǔ)數(shù)據(jù)綁定技術(shù)就是把已經(jīng)打開(kāi)的數(shù)據(jù)集中某個(gè)或者某些字段綁定到組件的某些屬性上面的一種技術(shù)。具體而言,就是把已經(jīng)打開(kāi)數(shù)據(jù)的某個(gè)或者某些字段綁定到Text組件、GridView組件、ListView等組件上的能夠顯示數(shù)據(jù)5.2.2數(shù)據(jù)源控件數(shù)據(jù)源控件實(shí)現(xiàn)了豐富的數(shù)據(jù)檢索和更新功能,包括查詢、排序、分頁(yè)、篩選、更新、刪除以及插入等,UI控件能夠自動(dòng)利用這些功能而不需要代碼有7種數(shù)據(jù)源控件,如下圖所示:[例5-4]應(yīng)用SqlDataSource控件創(chuàng)建數(shù)據(jù)源案例要點(diǎn):1)將工具箱中的SqlDataSource控件拖到視圖2)點(diǎn)擊右上角處的小三角符號(hào),彈出SqlDataSource任務(wù)框,再點(diǎn)擊“配置數(shù)據(jù)源”3)添加連接時(shí),注意數(shù)據(jù)庫(kù)服務(wù)信息正確案例要點(diǎn):[例5-4]應(yīng)用SqlDataSource控件創(chuàng)建數(shù)據(jù)源4)配置查詢后,還可以測(cè)試查詢是否正確詳見(jiàn)書[例5-4]5.2.3數(shù)據(jù)綁定控件工具箱中的數(shù)據(jù)綁定控件如圖所示:本節(jié)通過(guò)案例介紹GridView控件、ListView控件、DataPager控件[例5-5]
GridView數(shù)據(jù)綁定控件實(shí)例案例要點(diǎn):1)配置數(shù)據(jù)源,同例5-42)在“字段對(duì)話框”,配置GridView顯示屬性。[例5-5]
GridView數(shù)據(jù)綁定控件實(shí)例屬性事件在控件的屬性框中設(shè)置GridView控件的屬性和詳見(jiàn)書[例5-5][例5-6]
ListView控件和DataPager控件應(yīng)用實(shí)例1)配置數(shù)據(jù)源,同例5-42)在配置ListView對(duì)話框中,配置list顯示屬性3)設(shè)置list列字段名修改設(shè)計(jì)視圖中的源代碼中<LayoutTemplate>區(qū)的代碼,其修改如下:<trrunat="server"style=""><thrunat="server">ISDN</th><thrunat="server">書名</th><thrunat="server">作者</th><thrunat="server">出版社</th></tr>4)通過(guò)DataPager控件實(shí)現(xiàn)分頁(yè)[例5-6]
ListView控件和DataPager控件應(yīng)用實(shí)例詳見(jiàn)書[例5-6]5.3使用LINQ5.3.1LINQ技術(shù)基礎(chǔ)5.3.2LINQDataSource數(shù)據(jù)源控件5.3.3使用LINQ實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)5.3.1LINQ技術(shù)基礎(chǔ)LINQ,語(yǔ)言集成查詢(LanguageIntegratedQuery)是一組用于c#和VisualBasic語(yǔ)言的擴(kuò)展。它允許編寫C#或者VisualBasic代碼以查詢數(shù)據(jù)庫(kù)相同的方式操作內(nèi)存數(shù)據(jù)。LINQ可以查詢或者操作任何形式的數(shù)據(jù),如對(duì)象(集合、數(shù)組、字符串等)、關(guān)系(關(guān)系數(shù)據(jù)庫(kù)、ADO.NET數(shù)據(jù)集等),以及XMLLINQ框架LINQ語(yǔ)法LINQ查詢語(yǔ)法跟SQL查詢語(yǔ)法很相似,表達(dá)式必須以from子句開(kāi)始,以select或group子句結(jié)束,中間可以包含一個(gè)或多個(gè)from、where、orderby、group、join、let等子句from子句:指定查詢操作的數(shù)據(jù)源和范圍變量select子句:指定查詢結(jié)果的類型和表現(xiàn)形式where子句:指定篩選元素的邏輯條件group子句:對(duì)查詢結(jié)果進(jìn)行分組orderby子句:對(duì)查詢結(jié)果進(jìn)行排序join子句:連接多個(gè)查詢操作的數(shù)據(jù)源let子句:引入用于存儲(chǔ)查詢表達(dá)式中的子表達(dá)式結(jié)果的范圍變量into子句:提供一個(gè)臨時(shí)標(biāo)識(shí)符,該標(biāo)識(shí)符可以在join、group或select子句中引用5.3.2LINQDataSource數(shù)據(jù)源控件LinQDataSource是ASP.NET4.0中引入的一個(gè)數(shù)據(jù)源控件,該控件與SqlDataSource控件相似LinQDataSource與數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行交互時(shí),不會(huì)將LinQDataSource控件直接連接到數(shù)據(jù)庫(kù),而是與表示數(shù)據(jù)庫(kù)和表的實(shí)體類進(jìn)行交互5.3.3使用LINQ實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)目前為止LINQ所支持的數(shù)據(jù)源有SQLServer、Oracle、XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)以及內(nèi)存中的數(shù)據(jù)集合本節(jié)中主要以兩個(gè)實(shí)例,來(lái)介紹LINQ實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)應(yīng)用LinQ查詢語(yǔ)句從數(shù)組中查詢相關(guān)數(shù)據(jù)應(yīng)用LINQ從SQL中訪問(wèn)、插入、刪除數(shù)據(jù)操作[例5-7]應(yīng)用LinQ查詢語(yǔ)句從數(shù)組中查詢相關(guān)數(shù)據(jù)案例要點(diǎn):1)
通過(guò)LinQ查詢語(yǔ)句,將查詢結(jié)果放到var對(duì)象中varvalue=fromvinarraywherev%4==0orderbyvascendingselectv;2)讀出LINQ查詢結(jié)果foreach(varvinvalue){Response.Write(v.ToString()+"<br>");}詳見(jiàn)書[例5-7][例5-8]應(yīng)用LINQ從SQL中訪問(wèn)、插入、刪除數(shù)據(jù)操作案例要點(diǎn):1)新建LINQtoSQL數(shù)據(jù)連接上下文,自動(dòng)生成BOOKDataContext類、Book_Info類2)創(chuàng)建BOOKDataContext類、Book_InfoBOOKDataContextdb=newBOOKDataContext();Book_Infobook_add=newBook_Info
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025專業(yè)倉(cāng)儲(chǔ)合同
- 2025國(guó)英置業(yè)合同成本手冊(cè)
- 2025年度農(nóng)村私人魚塘承包與綠色漁業(yè)發(fā)展合作合同
- 二零二五年度農(nóng)產(chǎn)品品牌營(yíng)銷委托收購(gòu)合作協(xié)議3篇
- 二零二五年度車輛未過(guò)戶期間的車輛事故免責(zé)條款合同3篇
- 二零二五年度火鍋店轉(zhuǎn)讓及底料供應(yīng)協(xié)議3篇
- 二零二五年度執(zhí)業(yè)藥師藥品市場(chǎng)營(yíng)銷推廣服務(wù)合同3篇
- 2025年度特種水產(chǎn)品養(yǎng)殖項(xiàng)目合伙經(jīng)營(yíng)合同3篇
- 二零二五年度特色小鎮(zhèn)建設(shè)住房合作協(xié)議3篇
- 2025年度家庭農(nóng)場(chǎng)規(guī)?;B(yǎng)豬場(chǎng)整體轉(zhuǎn)讓合同3篇
- 送溫暖活動(dòng)困難職工幫扶申請(qǐng)表
- 小學(xué)六年級(jí)英語(yǔ)教學(xué)小助手的培養(yǎng)研究
- 2024年人教版初二物理上冊(cè)期末考試卷(附答案)
- 山東省臨沂市河?xùn)|區(qū)2023-2024學(xué)年五年級(jí)下學(xué)期期末綜合(道德與法治+科學(xué))檢測(cè)試題
- 廣安市岳池縣2022-2023學(xué)年七年級(jí)上學(xué)期期末道德與法治試題
- 產(chǎn)品進(jìn)入醫(yī)院的程序及方法
- 司機(jī)勞務(wù)合同
- 搭乘私家車免責(zé)協(xié)議書
- 行測(cè)言語(yǔ)理解與表達(dá)真題及完整答案1套
- 某冶金機(jī)械修造廠全廠總壓降變電所及配電系統(tǒng)設(shè)計(jì)
- 2024年社區(qū)工作者考試必背1000題題庫(kù)【含答案】
評(píng)論
0/150
提交評(píng)論