版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章ADO.NET數(shù)據(jù)訪問技術(shù)ActiveXDataObjects〔ADO〕是Microsoft開發(fā)的面向?qū)ο蟮臄?shù)據(jù)訪問庫,目前已經(jīng)得到了廣泛的應(yīng)用。而ADO.NET那么是ADO的后續(xù)技術(shù)。但ADO.NET并不是ADO的簡單升級,而是有非常大的改進(jìn)。利用ADO.NET,程序員可以非常簡單而快速地訪問各種數(shù)據(jù)庫,如SQLServer數(shù)據(jù)庫。.1第9章ADO.NET數(shù)據(jù)訪問技術(shù)ActiveXData9.1數(shù)據(jù)庫概述9.1.1關(guān)系數(shù)據(jù)庫的根本結(jié)構(gòu)1.表2.記錄3.字段4.關(guān)系5.索引6.視圖7.存儲過程.29.1數(shù)據(jù)庫概述9.1.1關(guān)系數(shù)據(jù)庫的根本結(jié)構(gòu).2表9.1學(xué)生情況表student學(xué)號姓名性別民族班號1王華女漢族070012孫麗女滿族070023李兵男漢族070016張軍男漢族070018馬棋男回族07002表9.2學(xué)生成績表score學(xué)號課程名分?jǐn)?shù)1C語言801數(shù)據(jù)結(jié)構(gòu)832C語言702數(shù)據(jù)結(jié)構(gòu)523C語言763數(shù)據(jù)結(jié)構(gòu)706C語言906數(shù)據(jù)結(jié)構(gòu)928C語言888數(shù)據(jù)結(jié)構(gòu)79Stud數(shù)據(jù)庫中有以下兩個(gè)表:.3表9.1學(xué)生情況表student學(xué)號姓名性別民族班號1王9.1.2SQLServer2005數(shù)據(jù)庫管理系統(tǒng)SQLServer2005是微軟公司在SQLServer2000根底上推出的關(guān)系數(shù)據(jù)庫管理系統(tǒng),是目前主流的數(shù)據(jù)庫管理系統(tǒng)之一。SQLServer2005版本:SQLServer2005EnterpriseEdition〔X86/X64〕——企業(yè)版SQLServer2005StandardEdition〔X86/X64〕——標(biāo)準(zhǔn)版SQLServer2005WorkgroupEdition〔X86〕——工作組版SQLServer2005DeveloperEdition〔X86/X64〕——開發(fā)版SQLServer2005ExpressEdition〔X86〕——學(xué)習(xí)版SQLServer7→SQLServer2000→SQLServer2005→SQLServer2021→SQLServer20SQLServer2005數(shù)據(jù)庫管理系統(tǒng)SQ1.建立數(shù)據(jù)庫Stud在安裝并進(jìn)入SQLServer2005系統(tǒng)后〔這里的登錄名為sa,密碼為123456〕,通過右擊“數(shù)據(jù)庫〞項(xiàng),在出現(xiàn)的快捷菜單中選擇“新建數(shù)據(jù)庫〞命令,建立一個(gè)名稱為Stud的數(shù)據(jù)庫,將其路徑改為Myaspnet網(wǎng)站的App_Data文件夾中〔完整路徑為C:\ASPNET例如\ASPNET\App_Data文件夾〕,這樣自動(dòng)建立Stud.mdf和Stud_log.ldf兩個(gè)文件,前者為數(shù)據(jù)庫主文件,后者是日志文件。.51.建立數(shù)據(jù)庫Stud.52.建立數(shù)據(jù)表student和score再展開Stud數(shù)據(jù)庫,右擊下方的“表〞項(xiàng),在出現(xiàn)的快捷菜單中選擇“新建表〞命令,可以通過交互建立表結(jié)構(gòu)。這里新建student和score兩個(gè)表,前者的關(guān)鍵字為“學(xué)號〞,后者的關(guān)鍵字為“學(xué)號+課程名〞,它們的表結(jié)構(gòu)分別如圖9.1和9.2所示。這樣在Stud數(shù)據(jù)庫的表項(xiàng)下方出現(xiàn)db.student和dbo.score兩個(gè)表項(xiàng),選中student表,右擊鼠標(biāo),在出現(xiàn)的快捷菜單中選擇“翻開表〞,可以輸入表記錄。在student和score表中輸入的記錄分別如圖9.3和9.4所示〔分別對應(yīng)表9.1和表9.2中的記錄〕。本章后面的例子使用這些樣本數(shù)據(jù)介紹數(shù)據(jù)庫編程方法。.62.建立數(shù)據(jù)表student和score.6圖9.1student表結(jié)構(gòu)圖9.2score表結(jié)構(gòu).7圖9.1student表結(jié)構(gòu)圖9.2score表結(jié)圖9.3student表記錄圖9.4score表記錄.8圖9.3student表記錄圖9.4score表記3.權(quán)限設(shè)置為了在網(wǎng)頁中訪問Stud數(shù)據(jù)庫,必須給Stud數(shù)據(jù)庫設(shè)置一些訪問權(quán)限,否那么在網(wǎng)頁運(yùn)行時(shí)出現(xiàn)以下錯(cuò)誤:無法翻開登錄所請求的數(shù)據(jù)庫"Stud"。登錄失敗。用戶'LCB-PC\ASPNET'登錄失敗。為了簡單,給Stud數(shù)據(jù)庫設(shè)置一些公共用戶訪問權(quán)限,其操作如下:〔1〕右擊數(shù)據(jù)庫項(xiàng)下的“Stud〞項(xiàng),在出現(xiàn)的快捷菜單中選擇“屬性〞命令,在出現(xiàn)的“數(shù)據(jù)庫屬性-Stud〞對話框中單擊“選項(xiàng)頁〞中的“權(quán)限〞項(xiàng),此時(shí)全為空白項(xiàng),說明沒有授予任何權(quán)限。〔2〕單擊“添加〞命令按鈕,在出現(xiàn)的“選擇用戶或角色〞對話框中單擊“瀏覽〞命令按鈕?!?〕在出現(xiàn)的對話框中勾選“[public]〞項(xiàng),返回到“數(shù)據(jù)庫屬性-Stud〞對話框。.93.權(quán)限設(shè)置為了簡單,給Stud數(shù)據(jù)庫設(shè)置一些公共用戶〔4〕通過勾選“public的顯式權(quán)限〞列表中的Delete、Insert、Select、Update的授予項(xiàng)以授予相應(yīng)權(quán)限。如圖9.5所示。.10〔4〕通過勾選“public的顯式權(quán)限〞列表中的Dele9.1.3結(jié)構(gòu)化查詢語言〔SQL〕1.SQL語言的組成SQL語言包含查詢、操縱、定義和控制等幾個(gè)局部。它們都是通過命令動(dòng)詞分開的,各種語句類型對應(yīng)的命令動(dòng)詞如下:數(shù)據(jù)查詢的命令動(dòng)詞為SELECT。數(shù)據(jù)定義的命令動(dòng)詞為CREATE、DROP。數(shù)據(jù)操縱的命令動(dòng)詞為INSERT、UPDATE、DELETE。數(shù)據(jù)控制的命令動(dòng)詞為GRANT、REVOKE。.119.1.3結(jié)構(gòu)化查詢語言〔SQL〕.112.數(shù)據(jù)定義語言〔1〕CREATE語句CREATE語句用于建立數(shù)據(jù)表,其根本格式如下:CREATETABLE表名(列名1數(shù)據(jù)類型1[NOTNULL][,列名2數(shù)據(jù)類型2[NOTNULL]]…)〔2〕DROP語句DROP語句用于刪除數(shù)據(jù)表,其根本格式如下:DROPTABLE表名.122.數(shù)據(jù)定義語言.123.數(shù)據(jù)操縱語言〔1〕INSERT語句INSERT語句用于在一個(gè)表中添加新記錄,然后給新記錄的字段賦值。其根本格式如下:INSERTINTO表名[(列名1[,列名2,…])]VALUES(表達(dá)式1[,表達(dá)式2,…]).133.數(shù)據(jù)操縱語言.13〔2〕UPDATE語句UPDATE語句用于新的值更新表中的記錄。其根本格式如下:UPDATE表名SET列名1=表達(dá)式1[,SET列名2=表達(dá)式2]…WHERE條件表達(dá)式〔3〕DELETE語句DELETE語句用于刪除記錄,其根本格式如下:DELETEFROM表名[WHERE條件表達(dá)式].14〔2〕UPDATE語句.144.數(shù)據(jù)查詢語句SQL的數(shù)據(jù)查詢語句是使用很頻繁的語句。SELECT的根本格式如下:SELECT字段表FORM表名WHERE查詢條件GROUPBY分組字段HAVING分組條件ORDERBY字段[ASC|DESC]各子句的功能如下:SELECT:指定要查詢的內(nèi)容。FORM:指定從其中選定記錄的表名。WHERE:指定所選記錄必須滿足的條件。GROUPBY:把選定的記錄分成特定的組。HAVING:說明每個(gè)組需要滿足的條件。ORDERBY:按特定的次序?qū)⒂涗浥判颉?154.數(shù)據(jù)查詢語句.15【例9.4】查詢student表中“09002〞班所有學(xué)生記錄。SELECT*FROMstudentWHERE班號='09002'.16【例9.4】查詢student表中“09002〞班所有學(xué)生SELECTstudent.學(xué)號,student.姓名,score.課程名,score.分?jǐn)?shù)FROMstudent,scoreWHEREstudent.學(xué)號=score.學(xué)號ORDERBYscore.課程名【例9.6】
查詢所有學(xué)生的學(xué)號、姓名、課程名和分?jǐn)?shù),要求按課程名排序。.17SELECTstudent.學(xué)號,student.姓名,s
【例9.7】
查詢分?jǐn)?shù)在80~90之間的所有學(xué)生的學(xué)號、姓名、課程名和分?jǐn)?shù)。SELECTstudent.學(xué)號,student.姓名,score.課程名,score.分?jǐn)?shù)FROMstudent,scoreWHEREstudent.學(xué)號=score.學(xué)號ANDscore.分?jǐn)?shù)BETWEEN80AND90.18【例9.7】查詢分?jǐn)?shù)在80~90之間的所有學(xué)生的學(xué)號、【例9.8】
查詢每個(gè)班每門課程的平均分。SELECTstudent.班號,score.課程名,AVG(score.分?jǐn)?shù))AS'平均分'FROMstudent,scoreWHEREstudent.學(xué)號=score.學(xué)號GROUPBYstudent.班號,score.課程名.19【例9.8】查詢每個(gè)班每門課程的平均分。SELECTst【例9.9】
查詢最高分的學(xué)生姓名和班號。SELECTstudent.姓名,student.班號FROMstudent,scoreWHEREstudent.學(xué)號=score.學(xué)號ANDscore.分?jǐn)?shù)=(SELECTMAX(分?jǐn)?shù))FROMscore).20【例9.9】查詢最高分的學(xué)生姓名和班號。SELECTst9.2ADO.NET模型9.2.1ADO.NET簡介ADO.NET是在.NETFramework上訪問數(shù)據(jù)庫的一組類庫,它利用.NETDataProvider〔數(shù)據(jù)提供程序〕以進(jìn)行數(shù)據(jù)庫的連接與訪問。通過ADO.NET,數(shù)據(jù)庫程序設(shè)計(jì)人員能夠很輕易地使用各種對象來訪問符合自己需求的數(shù)據(jù)庫內(nèi)容。.219.2ADO.NET模型.219.2.2ADO.NET體系結(jié)構(gòu).229.2.2ADO.NET體系結(jié)構(gòu).22【說明】ADO.NET是在.NETFramework上訪問數(shù)據(jù)庫的一組類庫。ADO.NET將數(shù)據(jù)庫中的數(shù)據(jù)將通過DataAdapter對象,以XML的格式傳送到客戶端的DataSet對象中,實(shí)現(xiàn)數(shù)據(jù)庫的離線操作。DataSet對象被稱為“內(nèi)存數(shù)據(jù)庫〞,具有DBMS的主要功能?!踩纾篋ataSet對象中含有DataTable對象、DataTable又含有DataRow、DataColum對象……〕客戶端對數(shù)據(jù)的操作都是在本地DataSet對象中完成的。最后,再通過DataAdapter對象“回寫〞到數(shù)據(jù)庫中。ADO.NET也提供“快捷、簡單〞的數(shù)據(jù)讀取方法。如:通過,DataReader對象實(shí)現(xiàn)針對查詢結(jié)果的只讀操作。.23【說明】.231..NETDataProvider
.NETDataProvider是指訪問數(shù)據(jù)源的一組類庫,主要是為了統(tǒng)一對于各類型數(shù)據(jù)源的訪問方式而設(shè)計(jì)的一套高效能的類庫。下表給出了.NETDataProvider中包含的4個(gè)對象。對象名稱功能說明Connection提供和數(shù)據(jù)源的連接功能。Command提供運(yùn)行訪問數(shù)據(jù)庫命令,傳送數(shù)據(jù)或修改數(shù)據(jù)的功能,例如運(yùn)行SQL命令和存儲過程等。DataAdapter是DataSet對象和數(shù)據(jù)源間的橋梁。DataAdapter使用4個(gè)Command對象來運(yùn)行查詢、新建、修改、刪除的SQL命令,把數(shù)據(jù)加載到DataSet,或者把DataSet內(nèi)的數(shù)據(jù)送回?cái)?shù)據(jù)源。DataReader通過Command對象運(yùn)行SQL查詢命令取得數(shù)據(jù)流,以便進(jìn)行高速、只讀、按順序的數(shù)據(jù)瀏覽。.241..NETDataProvider對象名稱功能說明C在.NETFramework中常用的有如下4組數(shù)據(jù)提供程序:〔1〕SQL.NETDataProvider〔2〕OLEDB.NETDataProvider〔3〕ODBC.NETDataProvider〔4〕ORACLE.NETDataProvider用于訪問不同類型的數(shù)據(jù)庫資源。【注意】如果采用SQL.NETDataProvider訪問SQLServer數(shù)據(jù)源,那么相應(yīng)的ADO.NET對象名稱之前都要加上“SQL〞。如:SqlConnection、SqlCommand、SqlDataAdapter、SqlDataReader。.25在.NETFramework中常用的有如下4組數(shù)據(jù)提供程序2.DataSetDataSet〔數(shù)據(jù)集〕是ADO.NET離線數(shù)據(jù)訪問模型中的核心對象,主要使用時(shí)機(jī)是在內(nèi)存中暫存并處理各種從數(shù)據(jù)源中所取回的數(shù)據(jù)。DataSet其實(shí)就是一個(gè)存放在內(nèi)存中的數(shù)據(jù)暫存區(qū),這些數(shù)據(jù)必須通過DataAdapter對象與數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交換。在DataSet內(nèi)部允許同時(shí)存放一個(gè)或多個(gè)不同的數(shù)據(jù)表〔DataTable〕對象。這些數(shù)據(jù)表是由數(shù)據(jù)列和數(shù)據(jù)域所組成的,并包含有主索引鍵、外部索引鍵、數(shù)據(jù)表間的關(guān)系〔Relation〕信息以及數(shù)據(jù)格式的條件限制〔Constraint〕。.262.DataSet.26.27.279.2.3ADO.NET數(shù)據(jù)庫的訪問流程ADO.NET數(shù)據(jù)庫訪問的一般流程如下:〔1〕建立Connection對象,創(chuàng)立一個(gè)數(shù)據(jù)庫連接?!?〕在建立連接的根底上可以使用Command對象對數(shù)據(jù)庫發(fā)送查詢、新增、修改和刪除等命令?!?〕創(chuàng)立DataAdapter對象,從數(shù)據(jù)庫中取得數(shù)據(jù)?!?〕創(chuàng)立DataSet對象,將DataAdapter對象填充到DataSet對象〔數(shù)據(jù)集〕中?!?〕如果需要,可以重復(fù)操作,一個(gè)DataSet對象可以容納多個(gè)數(shù)據(jù)集合?!?〕關(guān)閉數(shù)據(jù)庫連接?!?〕在DataSet上進(jìn)行所需要的操作。假設(shè)數(shù)據(jù)集的數(shù)據(jù)要輸出到窗體中或者網(wǎng)頁上,那么可將DataSet綁定道數(shù)據(jù)控件上。.289.2.3ADO.NET數(shù)據(jù)庫的訪問流程.289.3ADO.NET的數(shù)據(jù)訪問對象9.3.1SqlConnection對象在數(shù)據(jù)訪問中首先必須是建立數(shù)據(jù)庫的物理連接。
.NETDataProvider使用SqlConnection類的對象建立與SQLServer數(shù)據(jù)庫的物理連接。.299.3ADO.NET的數(shù)據(jù)訪問對象.29
1.SqlConnection類SqlConnection類的屬性說明ConnectionString獲取或設(shè)置用于打開數(shù)據(jù)庫的字符串。ConnectionTimeout獲取在嘗試建立連接時(shí)終止嘗試并生成錯(cuò)誤之前所等待的時(shí)間。Database獲取當(dāng)數(shù)據(jù)庫連接打開后,要使用的數(shù)據(jù)庫的名稱。DataSource獲取數(shù)據(jù)源的服務(wù)器名或文件名。Provider獲取在連接字符串的“Provider=”子句中指定的SQL提供程序的名稱。State獲取連接的當(dāng)前狀態(tài)。.301.SqlConnection類SqlConnectioSqlConnection類的方法說明Open()使用ConnectionString所指定的屬性設(shè)置打開數(shù)據(jù)庫連接。Close()關(guān)閉與數(shù)據(jù)庫的連接。這是關(guān)閉任何打開連接的首選方法。CreateCommand()創(chuàng)建并返回一個(gè)與SqlConnection關(guān)聯(lián)的SqlCommand對象。ChangeDatabase(StringDBN)為打開的SqlConnection更改當(dāng)前數(shù)據(jù)庫。.31SqlConnection類的方法說明Open()2.建立連接字符串ConnectionString建立連接字符串的方式是:先創(chuàng)立一個(gè)SqlConnection對象,將其ConnectionString屬性設(shè)置為如下值:"DataSource=localhost;InitialCatalog=Stud; IntegratedSecurity=False;UserId=sa;Password=123456"
【注】:另外一種ConnectionString格式:“server=(local);database=Stud;user=sa;password=123456".322.建立連接字符串ConnectionString"DatConnectionString中的常用的關(guān)鍵字值有效名稱如下:DataSource〔或Server或Address〕:要連接的SQLServer實(shí)例的效勞器名稱或網(wǎng)絡(luò)地址。InitialCatalog〔或Database〕:數(shù)據(jù)庫的名稱。IntegratedSecurity〔或Trusted_Connection〕:為False〔默認(rèn)值〕時(shí),將在連接中指定用戶ID和密碼。為True時(shí),將使用當(dāng)前的Windows帳戶憑據(jù)進(jìn)行身份驗(yàn)證??勺R別的值為True、False、yes、no以及與True等效的sspi〔強(qiáng)烈推薦〕。.33ConnectionString中的常用的關(guān)鍵字值有效名稱如ConnectionString中的常用的關(guān)鍵字值有效名稱如下:PersistSecurityInfo:為False〔默認(rèn)值〕或no〔強(qiáng)烈推薦〕時(shí),如果連接是翻開的或者一直處于翻開狀態(tài),那么平安敏感信息〔如密碼〕將不會(huì)作為連接的一局部返回。重置連接字符串將重置包括密碼在內(nèi)的所有連接字符串值??勺R別的值為True、False、yes和no。UserID:SQLServer登錄帳戶。Password〔或Pwd〕:SQLServer帳戶登錄的密碼。在指定連接字符串后,就可使用Open方法翻開連接。.34ConnectionString中的常用的關(guān)鍵字值有效名稱如【例9.10】設(shè)計(jì)一個(gè)說明直接建立連接字符串的連接過程的網(wǎng)頁WebForm9-1.aspx。其設(shè)計(jì)步驟如下:〔1〕在Myaspnet網(wǎng)站的ch9文件夾中添加一個(gè)名稱為WebForm9-1的空網(wǎng)頁。〔2〕其設(shè)計(jì)界面如以下圖所示,其中包含一個(gè)Button控件Button1和一個(gè)標(biāo)簽Label1,將該網(wǎng)頁的StyleSheetTheme屬性設(shè)置為Blue。.35【例9.10】設(shè)計(jì)一個(gè)說明直接建立連接字符串的連在該網(wǎng)頁上設(shè)計(jì)如下事件過程:protectedvoidButton1_Click(objectsender,EventArgse){
stringmystr;
SqlConnectionmyconn=newSqlConnection();
mystr="DataSource=localhost;InitialCatalog=Stud;"+ "IntegratedSecurity=False;UserId=sa;Password=123456";
myconn.ConnectionString=mystr;
myconn.Open();
if(myconn.State==ConnectionState.Open)
Label1.Text="成功連接到SQLServer數(shù)據(jù)庫";
else
Label1.Text="不能連接到SQLServer數(shù)據(jù)庫";
myconn.Close();}.36在該網(wǎng)頁上設(shè)計(jì)如下事件過程:.363.將連接字符串存放在Web.config文件中可以在Web.config文件中保存用于連接數(shù)據(jù)庫的連接字符串,再通過對Web.config文件加密,從而到達(dá)保護(hù)連接字符串的目的。例如,在<configuration>節(jié)中插入以下代碼:<connectionStrings> <removename="myconnstring"/> <addname="myconnstring" connectionString="DataSource=localhost; InitialCatalog=Stud;IntegratedSecurity=False; UserId=sa;Password=123456;" providerName="System.Data.SqlClient"/></connectionStrings>.373.將連接字符串存放在Web.config文件中.37這樣,以下代碼自動(dòng)獲取Web.config文件中的連接字符串myconnstring:stringmystr=
ConfigurationManager.ConnectionStrings["myconnstring"].ToString();SqlConnectionmyconn=newSqlConnection();myconn.ConnectionString=mystr;myconn.Open();.38這樣,以下代碼自動(dòng)獲取Web.config文件中的連接字也可以在Web.config文件的<configuration>節(jié)中插入以下代碼:
<appSettings>
<removekey="myconnestring"/>
<addkey="myconnestring"
value="DataSource=localhost;InitialCatalog=Stud;
IntegratedSecurity=False;UserId=sa;Password=123456;"/>
</appSettings>.39也可以在Web.config文件的<configuratio這樣,以下代碼自動(dòng)獲取Web.config文件中的連接字符串myconnstring:stringmystr=ConfigurationManager.AppSettings["myconnstring"];SqlConnectionmyconn=newSqlConnection();myconn.ConnectionString=mystr;myconn.Open();.40這樣,以下代碼自動(dòng)獲取Web.config文件中的連接字9.3.2SqlCommand對象建立數(shù)據(jù)連接之后,就可以執(zhí)行數(shù)據(jù)訪問操作和數(shù)據(jù)操縱操作了。一般對數(shù)據(jù)庫的操作被概括為CRUD—Create、Read、Update和Delete。在ADO.NET中定義SqlCommand類去執(zhí)行這些操作。SqlCommand類的屬性說明CommandText獲取或設(shè)置要對數(shù)據(jù)源執(zhí)行的SQL語句或存儲過程。CommandTimeout獲取或設(shè)置在終止執(zhí)行命令的嘗試并生成錯(cuò)誤之前的等待時(shí)間。CommandType獲取或設(shè)置一個(gè)值,表示Command對象的類型(表9.10)Connection數(shù)據(jù)命令對象所使用的連接對象Parameters參數(shù)集合(SqlParameterCollection)1.SqlCommand類的屬性和方法.419.3.2SqlCommand對象SqlCommandSqlCommand類的方法說明CreateParameter創(chuàng)建SqlParameter對象的新實(shí)例。ExecuteNonQuery()針對Connection執(zhí)行SQL語句并返回受影響的行數(shù)。一般用于執(zhí)行Delete、Update、Insert命令ExecuteReader()將CommandText發(fā)送到Connection并生成一個(gè)SqlDataReader。用于執(zhí)行Select命令,且希望返回一個(gè)DataReader對象。ExecuteScalar()執(zhí)行查詢,并返回查詢結(jié)果集中第一行的第一列。忽略其他列或行。.42SqlCommand類的方法說明CreateParam2.創(chuàng)立SqlCommand對象SqlCommand類的主要構(gòu)造函數(shù)如下:SqlCommand();SqlCommand(cmdText);SqlCommand(cmdText,connection);其中,cmdText參數(shù)指定查詢命令的文本。connection參數(shù)是一個(gè)SqlConnection,它表示到SQLServer數(shù)據(jù)庫的連接。.432.創(chuàng)立SqlCommand對象.43例如,以下語句創(chuàng)立一個(gè)SqlCommand對象mycmd:SqlConnectionmyconn=newSqlConnection();mystr="DataSource=localhost;InitialCatalog=Stud;"+ "IntegratedSecurity=False;UserId=sa;Password=123456";myconn.ConnectionString=mystr;myconn.Open();SqlCommandmycmd=newSqlCommand("SELECT*FROMstudent",myconn);.44例如,以下語句創(chuàng)立一個(gè)SqlCommand對象mycmd3.通過SqlCommand對象返回單個(gè)值在SqlCommand的方法中,ExecuteScalar方法執(zhí)行返回單個(gè)值的SQL命令。例如,如果想獲取Student數(shù)據(jù)表中學(xué)生的總?cè)藬?shù),那么可以使用這個(gè)方法執(zhí)行SQL查詢:SELECTCount(*)FROMstudent.453.通過SqlCommand對象返回單個(gè)值.45【例9.11】設(shè)計(jì)一個(gè)通過SqlCommand對象求score表中的平均分的網(wǎng)頁WebForm9-2.aspx。解:其設(shè)計(jì)步驟如下:〔1〕在Myaspnet網(wǎng)站的ch9文件夾中添加一個(gè)名稱為WebForm9-2的空網(wǎng)頁?!?〕其設(shè)計(jì)界面如以下圖所示,其中包含一個(gè)HTML標(biāo)簽、一個(gè)文本框TextBox1和一個(gè)Button控件Button1,將該網(wǎng)頁的StyleSheetTheme屬性設(shè)置為Blue。.46【例9.11】設(shè)計(jì)一個(gè)通過SqlCommand對象求在該網(wǎng)頁上設(shè)計(jì)如下事件過程:protectedvoidButton1_Click(objectsender,EventArgse){
stringmystr,mysql;
SqlConnectionmyconn=newSqlConnection();
SqlCommandmycmd=newSqlCommand();
mystr="DataSource=localhost;InitialCatalog=Stud;"+ "IntegratedSecurity=False;UserId=sa;Password=123456";
myconn.ConnectionString=mystr;
myconn.Open();
mysql="SELECTAVG(分?jǐn)?shù))FROMscore";
mycmd.CommandText=mysql;
mycmd.Connection=myconn;
TextBox1.Text=mycmd.ExecuteScalar().ToString();
myconn.Close();}.47在該網(wǎng)頁上設(shè)計(jì)如下事件過程:protectedvoid網(wǎng)頁運(yùn)行界面單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,再單擊“求平均分〞命令按鈕,其運(yùn)行結(jié)果如以下圖所示,表示所有學(xué)生平均分為78。.48網(wǎng)頁運(yùn)行界面單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,再單擊“求平4.通過SqlCommand對象執(zhí)行修改操作在SqlCommand的方法中,ExecuteNonQuery方法執(zhí)行不返回?cái)?shù)據(jù)結(jié)果的SQL命令。該方法主要用來更新數(shù)據(jù),通常使用它來執(zhí)行UPDATE、INSERT和DELETE語句。該方法不返回行,對于UPDATE、INSERT和DELETE語句,返回值為該命令所影響的行數(shù),對于所有其他類型的語句,返回值為-1。.494.通過SqlCommand對象執(zhí)行修改操作.49【例9.12】設(shè)計(jì)一個(gè)通過SqlCommand對象將score表中所有分?jǐn)?shù)增5分和減5分的網(wǎng)頁WebForm9-3。解:其設(shè)計(jì)步驟如下:〔1〕在Myaspnet網(wǎng)站的ch9文件夾中添加一個(gè)名稱為WebForm9-3的空網(wǎng)頁?!?〕其設(shè)計(jì)界面如以下圖所示,其中包含兩個(gè)Button控件Button1和Button2,將該網(wǎng)頁的StyleSheetTheme屬性設(shè)置為Blue。網(wǎng)頁設(shè)計(jì)界面.50【例9.12】設(shè)計(jì)一個(gè)通過SqlCommand對象將在該網(wǎng)頁上設(shè)計(jì)如下事件過程:publicpartialclassWebForm9_3:System.Web.UI.Page{
SqlCommandmycmd=newSqlCommand(); //公共字段
SqlConnectionmyconn=newSqlConnection(); //公共字段
protectedvoidPage_Load(objectsender,EventArgse)
{
stringmystr;
mystr="DataSource=localhost;InitialCatalog=Stud;"+ "IntegratedSecurity=False;UserId=sa;Password=123456";
myconn.ConnectionString=mystr;
myconn.Open();
}
protectedvoidPage_Unload()
{ myconn.Close(); //關(guān)閉本網(wǎng)頁時(shí)關(guān)閉連接
}.51在該網(wǎng)頁上設(shè)計(jì)如下事件過程:publicpartialc
protectedvoidButton1_Click(objectsender,EventArgse) {
stringmysql;
mysql="UPDATEscoreSET分?jǐn)?shù)=分?jǐn)?shù)+5";
mycmd.CommandText=mysql;
mycmd.Connection=myconn;
mycmd.ExecuteNonQuery(); }
protectedvoidButton2_Click(objectsender,EventArgse) {
stringmysql;
mysql="UPDATEscoreSET分?jǐn)?shù)=分?jǐn)?shù)-5";
mycmd.CommandText=mysql;
mycmd.Connection=myconn;
mycmd.ExecuteNonQuery(); }}.52 protectedvoidButton1_Click(單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,單擊“分?jǐn)?shù)+5〞命令按鈕,此時(shí)score表中所有分?jǐn)?shù)都增加5分,為了保存score表不變,再單擊“分?jǐn)?shù)-5〞命令按鈕,此時(shí)score表中所有分?jǐn)?shù)都恢復(fù)成原來的數(shù)據(jù),其運(yùn)行界面如以下圖所示。.53單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,單擊“分?jǐn)?shù)+5〞命令按鈕5.在SqlCommand對象的SQL命令中指定參數(shù)SQL.NETDataProvider支持執(zhí)行命令中包含參數(shù)的情況,也就是說,可以使用包含參數(shù)的數(shù)據(jù)命令或存儲過程執(zhí)行數(shù)據(jù)篩選操作和數(shù)據(jù)更新等操作,其主要流程如下:〔1〕創(chuàng)立Connection對象,并設(shè)置相應(yīng)的屬性值?!?〕翻開Connection對象?!?〕創(chuàng)立Command對象并設(shè)置相應(yīng)的屬性值,其中CommandText屬性中含有占位符。〔4〕創(chuàng)立參數(shù)對象,將建立好的參數(shù)對象添加到Command對象的Parameters集合中。〔5〕為參數(shù)對象賦值。〔6〕執(zhí)行數(shù)據(jù)命令。〔7〕關(guān)閉相關(guān)對象。.545.在SqlCommand對象的SQL命令中指定參數(shù).5例如,下面的更新語句:“UPDATEcourseSETcName=@NameWHEREcID=@ID〞其中course是一個(gè)課程表,有cID〔課程號〕和cName〔課程名〕兩個(gè)列。該命令是將指定cID的課程記錄的cName替換成指定的值。其中@ID和@Name均為參數(shù),在執(zhí)行該語句之前需要為參數(shù)賦值??梢允褂靡韵旅钕騊arameters參數(shù)集合中添加參數(shù)值:mycmd.Parameters.Add("@Name",SqlType.VarChar,10).Value=Name1;mycmd.Parameters.Add("@ID",SqlType.VarChar,5).Value=ID1;.55例如,下面的更新語句:可以使用以下命令向Paramet【例9.13】設(shè)計(jì)一個(gè)通過SqlCommand對象求出指定學(xué)號學(xué)生的平均分的網(wǎng)頁WebForm9-4。解:其設(shè)計(jì)步驟如下:〔1〕在Myaspnet網(wǎng)站的ch9文件夾中添加一個(gè)名稱為WebForm9-4的空網(wǎng)頁。〔2〕其設(shè)計(jì)界面如以下圖所示,其中包含兩個(gè)HTML標(biāo)簽、兩個(gè)文本框〔TextBox1和TextBox2〕和一個(gè)Button控件Button1,將該網(wǎng)頁的StyleSheetTheme屬性設(shè)置為Blue。網(wǎng)頁設(shè)計(jì)界面.56【例9.13】設(shè)計(jì)一個(gè)通過SqlCommand對象求在該網(wǎng)頁上設(shè)計(jì)如下事件過程:protectedvoidButton1_Click(objectsender,EventArgse){
stringmystr,mysql;
SqlConnectionmyconn=newSqlConnection();
SqlCommandmycmd=newSqlCommand();
mystr="DataSource=localhost;InitialCatalog=Stud;"+
"IntegratedSecurity=False;UserId=sa;Password=123456";
myconn.ConnectionString=mystr;
myconn.Open();
mysql="SELECTAVG(分?jǐn)?shù))FROMscoreWHERE學(xué)號=@no";
mycmd.CommandText=mysql;
mycmd.Connection=myconn;SqlParameterp1=newSqlParameter("@no",SqlDbType.VarChar,5);
mycmd.Parameters.Add(p1);p1.value=TextBox1.Text.Trim();
TextBox2.Text=mycmd.ExecuteScalar().ToString();
myconn.Close();}.57在該網(wǎng)頁上設(shè)計(jì)如下事件過程:protectedvoidB網(wǎng)頁運(yùn)行界面上述代碼先建立連接,然后通過ExecuteScalar方法執(zhí)行SQL命令,通過“@no〞替換返回指定學(xué)號的平均分。運(yùn)行本網(wǎng)頁,輸入學(xué)號8,單擊“求平均分〞命令按鈕,運(yùn)行界面如以下圖所示。.58網(wǎng)頁運(yùn)行界面上述代碼先建立連接,然后通過ExecuteS9.3.3SqlDataReader對象當(dāng)執(zhí)行返回結(jié)果集的命令時(shí),需要一個(gè)方法從結(jié)果集中提取數(shù)據(jù)。處理結(jié)果集的方法有兩個(gè):〔1〕使用SqlDataReader對象〔數(shù)據(jù)閱讀器〕;〔2〕同時(shí)使用SqlDataAdapter對象〔數(shù)據(jù)適配器〕+DataSet對象。.599.3.3SqlDataReader對象.591.SqlDataReader類的屬性和方法屬性說明FieldCount獲取當(dāng)前行中的列數(shù)IsClosed獲取一個(gè)布爾值,指出SqlDataReader對象是否關(guān)閉RecordsAffected獲取執(zhí)行SQL語句時(shí)影響到的行數(shù)方法說明Read()將SqlDataReader對象前進(jìn)到下一行并讀取,返回布爾值指示是否有多行Close()關(guān)閉SqlDataReader對象IsDBNull返回布爾值,表示列是否包含NULL值NextResult()將SqlDataReader對象移到下一個(gè)結(jié)果集,返回布爾值指示該結(jié)果集是否有多行GetBoolean(inti)返回指定列的值,類型為布爾值GetString(inti)返回指定列的值,類型為字符串GetByte(inti)返回指定列的值,類型為字節(jié)GetInt32(inti)返回指定列的值,類型為整型值GetDouble(inti)返回指定列的值,類型為雙精度值GetDataTime(inti)返回指定列的值,類型為日期時(shí)間值GetOrdinal(inti)返回指定列的序號或數(shù)字位置(首列序號為0)GetBoolean(inti)返回指定列的值,類型為對象.601.SqlDataReader類的屬性和方法屬性說明Fie2.創(chuàng)立SqlDataReader對象在ADO.NET中,SqlDataReader類沒有提供構(gòu)造函數(shù)。人們通常調(diào)用Command類的ExecuteReader方法,這個(gè)方法將返回一個(gè)DataReader對象。例如,以下代碼創(chuàng)立一個(gè)SqlDataReader對象myreader:SqlCommandcmd=newSqlCommand(CommandText,ConnectionObject);SqlDataReadermyreader=cmd.ExecuteReader();注意:SqlDataReader對象不能使用new來創(chuàng)立。.612.創(chuàng)立SqlDataReader對象.613.遍歷SqlDataReader對象的記錄
當(dāng)ExecuteReader方法返回DataReader對象時(shí),當(dāng)前光標(biāo)的位置是第一條記錄的前面。必須調(diào)用SqlDataReader對象的Read方法把光標(biāo)移動(dòng)到第一條記錄,然后,第一條記錄將變成當(dāng)前記錄。如果SqlDataReader對象中包含的記錄不止一條,Read方法就返回一個(gè)Boolean值true。想要移動(dòng)到下一條記錄,需要再次調(diào)用Read方法。重復(fù)上述過程,直到最后一條記錄,此時(shí)Read方法將返回false。經(jīng)常使用While循環(huán)來遍歷記錄:
while(myreader.Read())
{ //讀取數(shù)據(jù)
}
只要Read方法返回的值為true,就可以訪問當(dāng)前記錄中包含的字段。.623.遍歷SqlDataReader對象的記錄.624.訪問字段中的值〔1〕Item屬性每一個(gè)DataReader對象都定義了一個(gè)Item屬性,此屬性返回一個(gè)由字段序號或字段名指定的字段值。字段序號總是基于0開始編號的。如:SqlDataReatermyreader=mycmd.ExecuteReader();Stringstr1=myreader[1];Stringstr2=myreader[“Cname〞];.634.訪問字段中的值.63〔2〕Get系列方法每一個(gè)DataReader對象都定義了一組Get方法,那些方法將返回適當(dāng)類型的值。例如,GetInt32方法把返回的字段值作為32位整數(shù),每一個(gè)Get方法都以字段序號為參數(shù)。例如,:myreader.GetInt32[0];myreader.GetString[1];.64〔2〕Get系列方法.64【例9.14】設(shè)計(jì)一個(gè)通過SqlDataReader對象在一個(gè)列表框中輸出所有學(xué)生記錄的網(wǎng)頁WebForm9-5。解:其設(shè)計(jì)步驟如下:〔1〕在Myaspnet網(wǎng)站的ch9文件夾中添加一個(gè)名稱為WebForm9-5的空網(wǎng)頁?!?〕其設(shè)計(jì)界面如以下圖所示,其中包含一個(gè)列表框ListBox1〔Rows屬性設(shè)為8〕和一個(gè)Button控件Button1,將該網(wǎng)頁的StyleSheetTheme屬性設(shè)置為Blue。網(wǎng)頁設(shè)計(jì)界面.65【例9.14】設(shè)計(jì)一個(gè)通過SqlDataReader對在該網(wǎng)頁上設(shè)計(jì)如下事件過程:protectedvoidButton1_Click(objectsender,EventArgse){
stringmystr,mysql;
SqlConnectionmyconn=newSqlConnection();
SqlCommandmycmd=newSqlCommand();
mystr="DataSource=localhost;InitialCatalog=Stud;"+ "IntegratedSecurity=False;UserId=sa;Password=123456";
myconn.ConnectionString=mystr;
myconn.Open();
mysql="SELECT*FROMstudent";
mycmd.CommandText=mysql;
mycmd.Connection=myconn;
SqlDataReadermyreader=mycmd.ExecuteReader();
ListBox1.Items.Add("學(xué)號姓名性別民族班號");
ListBox1.Items.Add("=================================");
while(myreader.Read()) //循環(huán)讀取信息
ListBox1.Items.Add(String.Format("{0}{1}{2}{3}{4}",
myreader[0].ToString(),myreader[1].ToString(),
myreader[2].ToString(),myreader[3].ToString(),
myreader[4].ToString()));
myconn.Close();
myreader.Close();}.66在該網(wǎng)頁上設(shè)計(jì)如下事件過程:protectedvoidB網(wǎng)頁運(yùn)行界面單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,單擊“輸出所有學(xué)生〞命令按鈕,運(yùn)行界面如以下圖所示。.67網(wǎng)頁運(yùn)行界面單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,單擊“輸出所9.3.4SqlDataAdapter對象SqlDataAdapter對象〔數(shù)據(jù)適配器〕可以執(zhí)行SQL命令以及調(diào)用存儲過程、傳遞參數(shù),最重要的是取得數(shù)據(jù)結(jié)果集,在數(shù)據(jù)庫和DataSet對象之間來回傳輸數(shù)據(jù)。數(shù)據(jù)庫DataSet對象SqlDataAdapter對象.689.3.4SqlDataAdapter對象數(shù)據(jù)庫DataS屬性說明SelectCommand獲取或設(shè)置SQL語句用于選擇數(shù)據(jù)源中的記錄。該值為SqlCommand對象InsertCommand獲取或設(shè)置SQL語句用于將新記錄插入到數(shù)據(jù)源中。該值為SqlCommand對象UpdateCommand獲取或設(shè)置SQL語句用于更新數(shù)據(jù)源中的記錄。該值為SqlCommand對象DeleteCommand獲取或設(shè)置SQL語句用于從數(shù)據(jù)集中刪除記錄。該值為SqlCommand對象AcceptChangesDuringFill獲取或設(shè)置一個(gè)值,該值指示在任何Fill操作過程中時(shí),是否接受對行所做的修改AcceptChangesDuringUpdate獲取或設(shè)置在Update期間是否調(diào)用AcceptChangesFillLoadOption獲取或設(shè)置LoadOption,后者確定適配器如何從SqlDataReader中填充DataTableMissingMappingAction確定傳入數(shù)據(jù)沒有匹配的表或列時(shí)需要執(zhí)行的操作MissingSchemaAction確定現(xiàn)有DataSet架構(gòu)與傳入數(shù)據(jù)不匹配時(shí)需要執(zhí)行的操作TableMappings獲取一個(gè)集合,它提供源表和DataTable之間的主映射1.SqlDataAdapter類的屬性和方法.69屬性說明SelectCommand獲取或設(shè)置SQL語句用于選方法說明Fill()用來自動(dòng)執(zhí)行SqlDataAdapter對象的SelectCommand屬性中相對應(yīng)的SQL語句,以檢索數(shù)據(jù)庫中的數(shù)據(jù),然后更新數(shù)據(jù)集中的DataTable對象,如果DataTable對象不存在,則創(chuàng)建它FillSchema將DataTable添加到DataSet中,并配置架構(gòu)以匹配數(shù)據(jù)源中的架構(gòu)GetFillParameters獲取當(dāng)執(zhí)行SQLSELECT語句時(shí)由用戶設(shè)置的參數(shù)Update()用來自動(dòng)執(zhí)行UpdateCommand、InsertCommand或DeleteCommand屬性相對應(yīng)的SQL語句,以使數(shù)據(jù)集中的數(shù)據(jù)來更新數(shù)據(jù)庫。.70方法說明Fill()用來自動(dòng)執(zhí)行SqlDataAdapte2.創(chuàng)立SqlDataAdapter對象SqlDataAdapter類有以下構(gòu)造函數(shù):SqlDataAdapter();SqlDataAdapter(SqlCommandcmd);SqlDataAdapter(selectCommandText);SqlDataAdapter(selectCommandText,selectConnection);SqlDataAdapter((selectCommandText,selectConnectionString);例如:stringmystr,mysql;SqlConnectionmyconn=newSqlConnection();mystr="DataSource=localhost;InitialCatalog=Stud;"+ "IntegratedSecurity=False;UserId=sa;Password=123456";myconn.ConnectionString=mystr;myconn.Open();mysql="SELECT*FROMstudent";SqlDataAdaptermyadapter=newSqlDataAdapter(mysql,myconn);myconn.Close();.712.創(chuàng)立SqlDataAdapter對象例如:.713.使用Fill方法
Fill方法用于向DataSet對象填充從數(shù)據(jù)源中讀取的數(shù)據(jù)。調(diào)用Fill方法的語法格式有多種,常見的格式如下:
SqlDataAdapter對象名.Fill(DataSet對象名,"數(shù)據(jù)表名");
其中第一個(gè)參數(shù)是數(shù)據(jù)集對象名,表示要填充的數(shù)據(jù)集對象;第二個(gè)參數(shù)是一個(gè)字符串,表示在本地緩沖區(qū)中建立的臨時(shí)表的表名。例如,以下語句用course表數(shù)據(jù)填充數(shù)據(jù)集mydataset1:
SqlDataAdapter1.Fill(mydataset1,"course");.723.使用Fill方法.724.使用Update方法
Update方法用于將數(shù)據(jù)集DataSet對象中的數(shù)據(jù)按InsertCommand屬性、DeleteCommand屬性和UpdateCommand屬性所指定的要求更新數(shù)據(jù)源,即調(diào)用3個(gè)屬性中所定義的SQL語句來更新數(shù)據(jù)源。
Update方法常見的調(diào)用格式如下。
SqlDataAdapter對象名.Update(DataSet對象名,[數(shù)據(jù)表名]);
其中第一個(gè)參數(shù)是數(shù)據(jù)集對象名,表示要將哪個(gè)數(shù)據(jù)集對象中的數(shù)據(jù)更新到數(shù)據(jù)源中;第二個(gè)參數(shù)是一個(gè)字符串,表示臨時(shí)表的名稱。.734.使用Update方法.739.4DataSet對象
DataSet是ADO.NET數(shù)據(jù)庫訪問組件的核心,主要是用來支持ADO.NET的不連貫連接及數(shù)據(jù)分布。它的數(shù)據(jù)駐留內(nèi)存,可以保證和數(shù)據(jù)源無關(guān)的一致性的關(guān)系模型,并用于多個(gè)異種數(shù)據(jù)源的數(shù)據(jù)操作。9.4.1DataSet對象概述.749.4DataSet對象.74創(chuàng)立DataSet對象有多種方法:①設(shè)計(jì)工具②也可以使用程序代碼來創(chuàng)立DataSet對象。使用程序代碼創(chuàng)立DataSet對象的語法格式如下:DataSet對象名=newDataSet();或DataSet對象名=newDataSet(dataSetName);其中,dataSetName為一個(gè)字符串,用于指出DataSet的名稱。.75創(chuàng)立DataSet對象有多種方法:.75DataTable對象9.4.2Dataset對象的屬性和方法屬性說明CaseSensitive獲取或設(shè)置一個(gè)值,該值指示DataTable對象中的字符串比較是否區(qū)分大小寫DataSetName獲取或設(shè)置當(dāng)前DataSet的名稱Relations獲取用于將表鏈接起來并允許從父表瀏覽到子表的關(guān)系的集合Tables獲取包含在DataSet中的DataTable表的集合DataSetTables:DataTable集合DataTable對象Columns:DataColumn集合Rows:DataRow集合DataTable對象DataColumn對象DataTable對象DataRow對象.76DataTable對象9.4.2Dataset對象的屬性和DataSet對象的方法說明AcceptChanges提交自加載此DataSet或上次調(diào)用AcceptChanges以來對其進(jìn)行的所有更改Clear移除DataSet對象中的所有表中的數(shù)據(jù)CreateDataReader為每個(gè)DataTable返回帶有一個(gè)結(jié)果集的DataTableReader,順序與Tables集合中表的顯示順序相同GetChanges獲取DataSet的副本,該副本包含自上次加載以來或自調(diào)用AcceptChanges以來對該數(shù)據(jù)集進(jìn)行的所有更改HasChanges獲取一個(gè)值,該值指示DataSet是否有更改,包括新增行、已刪除的行或已修改的行Merge將指定的DataSet、DataTable或DataRow對象的數(shù)組合并到當(dāng)前的DataSet或DataTable中Reset將DataSet重置為初始狀態(tài).77DataSet對象的方法說明AcceptChanges提交自9.4.3Tables集合和DataTable對象
DataSet對象的Tables屬性由表組成,每個(gè)表是一個(gè)DataTable對象。實(shí)際上,每一個(gè)DataTable對象代表了數(shù)據(jù)庫中的一個(gè)表,每個(gè)DataTable數(shù)據(jù)表都由相應(yīng)的行和列組成。
可以通過索引來引用Tables集合中的一個(gè)表,例如,Tables[i]表示第i個(gè)表,其索引值從0開始編號。.789.4.3Tables集合和DataTable對象.781.Tables集合的屬性和方法Tables集合的屬性說明CountTables集合中表個(gè)數(shù)Item檢索Tables集合中指定索引處的表Tables集合的方法說明Add向Tables集合中添加一個(gè)表AddRange向Tables集合中添加一個(gè)表的數(shù)組Clear移除Tables集合中的所有表Contains確定指定表是否在Tables集合中Equqls判斷是否等于當(dāng)前對象GetType獲取當(dāng)前實(shí)例的TypeInsert將一個(gè)表插入到Tables集合中指定的索引處IndexOf檢索指定的表在Tables集合中的索引Remove從Tables集合中移除指定的表RemoveAt移除Tables集合中指定索引處的表.791.Tables集合的屬性和方法Tables集合的屬性說明2.DataTable對象
一個(gè)DataTable對象包含一個(gè)Columns屬性即列集合,和一個(gè)Rows屬性即行集合。屬性說明CaseSensitive指示表中的字符串比較是否區(qū)分大小寫ChildRelations獲取此DataTable的子關(guān)系的集合Columns獲取屬于該表的列的集合Constraints獲取由該表維護(hù)的約束的集合DataSet獲取此表所屬的DataSetDefaultView返回可用于排序、篩選和搜索DataTable的DataViewExtendedProperties獲取自定義用戶信息的集合ParentRelations獲取該DataTable的父關(guān)系的集合PrimaryKey獲取或設(shè)置充當(dāng)數(shù)據(jù)表主鍵的列的數(shù)組Rows獲取屬于該表的行的集合TableName獲取或設(shè)置DataTable的名稱.802.DataTable對象屬性說明CaseSensitiv方法說明AcceptChanges提交自上次調(diào)用AcceptChanges以來對該表進(jìn)行的所有更改Clear清除所有數(shù)據(jù)的DataTableCompute計(jì)算用來傳遞篩選條件的當(dāng)前行上的給定表達(dá)式CreateDataReader返回與此DataTable中的數(shù)據(jù)相對應(yīng)的DataTableReaderImportRow將DataRow復(fù)制到DataTable中,保留任何屬性設(shè)置以及初始值和當(dāng)前值Merge將指定的DataTable與當(dāng)前的DataTable合并NewRow創(chuàng)建與該表具有相同架構(gòu)的新DataRowSelect獲取DataRow對象的數(shù)組.81方法說明AcceptChanges提交自上次調(diào)用Accept3.建立包含在DataSet中的表建立包含在數(shù)據(jù)集中的表的方法主要有以下兩種?!?〕利用SqlDataAdapter的Fill方法自動(dòng)建立DataSet中的DataTable對象先通過SqlDataAdapter對象從數(shù)據(jù)源中提取記錄數(shù)據(jù),然后調(diào)用其Fill方法,將所提取的記錄存入DataSet中對應(yīng)的表內(nèi),如果DataSet中不存在對應(yīng)的表,F(xiàn)ill方法會(huì)先建立表再將記錄填入其中。例如,以下語句向DataSet對象myds中添加一個(gè)表course及其包含的數(shù)據(jù)記錄:DataSetmyds=newDataSet();SqlDataAdaptermyda=newSqlDataAdapter("SELECT*Fromcourse",myconn);myda.Fill(myds,"course");.823.建立包含在DataSet中的表.82〔2〕將建立的DataTable對象添加到DataSet中(較少適用)先建立DataTable對象,然后調(diào)用DataSet的表集合屬性Tables的Add方法,將DataTable對象添加到DataSet對象中。例如,以下語句向DataSet對象myds中添加一個(gè)表,并返回表的名稱course:DataSetmyds=newDataSet();DataTablemydt=newDataTable("course");myds.Tables.Add(mydt);textBox1.Text=myds.Tables["course"].TableName;//文本框中顯示“course〞.83〔2〕將建立的DataTable對象添加到DataSet中(Columns集合和DataColumn對象
Rows集合和DataRow對象
Relations集合和DataRelation對象以下內(nèi)容自學(xué):.84Columns集合和DataColumn對象以下內(nèi)容自學(xué)9.5數(shù)據(jù)源控件9.5.1數(shù)據(jù)源控件概述數(shù)據(jù)源控件允許用戶使用不同類型的數(shù)據(jù)源,如數(shù)據(jù)庫、XML文件或中間層業(yè)務(wù)對象。數(shù)據(jù)源控件連接到數(shù)據(jù)源,從中檢索數(shù)據(jù),并使得其他控件可以綁定到數(shù)據(jù)源而無需代碼。數(shù)據(jù)源控件還支持修改數(shù)據(jù)。.859.5數(shù)據(jù)源控件.85.86.869.5.2SqlDataSource控件SqlDataSource控件對應(yīng)的類為SqlDataSource,它表示到Web應(yīng)用程序中數(shù)據(jù)庫的直接連接。數(shù)據(jù)綁定控件〔如GridView、DetailsView和FormView控件〕可以使用SqlDataSource控件自動(dòng)檢索和修改數(shù)據(jù)??梢詫⒂脕磉x擇、插入、更新和刪除數(shù)據(jù)的命令指定為SqlDataSource控件的一局部,并讓該控件自動(dòng)執(zhí)行這些操作。用戶無需編寫代碼來創(chuàng)立連接并指定用于查詢和更新數(shù)據(jù)庫的命令。.879.5.2SqlDataSource控件.871.SqlDataSource控件的屬性、方法和事件SqlDataSource控件的構(gòu)造函數(shù)如下:SqlDataSource()。初始化SqlDataSource類的新實(shí)例。SqlDataSource(stringconnectionString,stringselectCommand)。使用指定的連接字符串和Select命令初始化SqlDataSource類的新實(shí)例。SqlDataSource(stringproviderName,stringconnectionString,stringselectCommand)。使用指定的連接字符串和Select命令初始化SqlDataSource類的新實(shí)例。.881.SqlDataSource控件的屬性、方法和事件Sql表9.34SqlDataSource控件的常用屬性及其說明名稱說明ConnectionString獲取或設(shè)置特定于ADO.NET提供程序的連接字符串,SqlDataSource控件使用該字符串連接基礎(chǔ)數(shù)據(jù)庫。DataSourceMode獲取或設(shè)置SqlDataSource控件獲取數(shù)據(jù)所用的數(shù)據(jù)檢索模式。DeleteCommand獲取或設(shè)置SqlDataSource控件從基礎(chǔ)數(shù)據(jù)庫刪除數(shù)據(jù)所用的SQL字符串。DeleteCommandType獲取或設(shè)置一個(gè)值,該值指示DeleteCommand屬性中的文本是SQL語句還是存儲過程的名稱。DeleteParameters從與SqlDataSource控件相關(guān)聯(lián)的SqlDataSourceView對象獲取包含DeleteCommand屬性所使用的參數(shù)的參數(shù)集合。FilterExpression獲取或設(shè)置調(diào)用Select方法時(shí)應(yīng)用的篩選表達(dá)式。FilterParameters獲取與FilterExpression字符串中的任何參數(shù)占位符關(guān)聯(lián)的參數(shù)的集合。InsertCommand獲取或設(shè)置SqlDataSource控件將數(shù)據(jù)插入基礎(chǔ)數(shù)據(jù)庫所用的SQL字符串。InsertCommandType獲取或設(shè)置一個(gè)值,該值指示InsertCommand屬性中的文本是SQL語句還是存儲過程的名稱。.89表9.34SqlDataSource控件的常用屬性及其說InsertParameters從與SqlDataSource控件相關(guān)聯(lián)的SqlDataSourceView對象獲取包含InsertCommand屬性所使用的參數(shù)的參數(shù)集合。ProviderName獲取或設(shè)置.NETFramework數(shù)據(jù)提供程序的名稱,SqlDataSource控件使用該提供程序來連接基礎(chǔ)數(shù)據(jù)源。SelectCommand獲取或設(shè)置SqlDataSource控件從基礎(chǔ)數(shù)據(jù)庫檢索數(shù)據(jù)所用的SQL字符串。SelectCommandType獲取或設(shè)置一個(gè)值,該值指示SelectCommand屬性中的文本是SQL查詢還是存儲過程的名稱。SelectParameters從與SqlDataSource控件相關(guān)聯(lián)的SqlDataSourceView對象獲取包含SelectCommand屬性所使用的參數(shù)的參數(shù)集合。SortParameterName獲取或設(shè)置存儲過程參數(shù)的名稱,在使用存儲過程執(zhí)行數(shù)據(jù)檢索時(shí),該存儲過程參數(shù)用于對檢索到的數(shù)據(jù)進(jìn)行排序。UpdateCommand獲取或設(shè)置SqlDataSource控件更新基礎(chǔ)數(shù)據(jù)庫中的數(shù)據(jù)所用的SQL字符串。UpdateCommandType獲取或設(shè)置一個(gè)值,該值指示UpdateCommand屬性中的文本是SQL語句還是存儲過程的名稱。UpdateParam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版全新泥水工合同協(xié)議下載
- 2025年度智能場館租賃合同中保證金與押金管理細(xì)則3篇
- 2025年網(wǎng)絡(luò)投票系統(tǒng)開發(fā)與運(yùn)營合同范本3篇
- 2025年度特色餐飲文化體驗(yàn)館租賃經(jīng)營合同3篇
- 2025年教育機(jī)構(gòu)安保人員勞動(dòng)合同范本2篇
- 二零二五版飯店租賃合同合同履行監(jiān)督與評估機(jī)制2篇
- 2025年度大數(shù)據(jù)中心建設(shè)合同擔(dān)保協(xié)議書范本2篇
- 2024年規(guī)范化消石灰銷售協(xié)議模板版B版
- 二零二五版智慧城市建設(shè)監(jiān)理團(tuán)隊(duì)聘用合同3篇
- 2024美容院部分股份轉(zhuǎn)讓協(xié)議書
- 2024年??谑羞x調(diào)生考試(行政職業(yè)能力測驗(yàn))綜合能力測試題及答案1套
- 六年級數(shù)學(xué)質(zhì)量分析及改進(jìn)措施
- 一年級下冊數(shù)學(xué)口算題卡打印
- 2024年中科院心理咨詢師新教材各單元考試題庫大全-下(多選題部分)
- 真人cs基于信號發(fā)射的激光武器設(shè)計(jì)
- 【閱讀提升】部編版語文五年級下冊第三單元閱讀要素解析 類文閱讀課外閱讀過關(guān)(含答案)
- 四年級上冊遞等式計(jì)算練習(xí)200題及答案
- 法院后勤部門述職報(bào)告
- 2024年國信證券招聘筆試參考題庫附帶答案詳解
- 道醫(yī)館可行性報(bào)告
- 仙家送錢表文-文字打印版
評論
0/150
提交評論