第8章數(shù)據(jù)庫(kù)應(yīng)用_第1頁(yè)
第8章數(shù)據(jù)庫(kù)應(yīng)用_第2頁(yè)
第8章數(shù)據(jù)庫(kù)應(yīng)用_第3頁(yè)
第8章數(shù)據(jù)庫(kù)應(yīng)用_第4頁(yè)
第8章數(shù)據(jù)庫(kù)應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩128頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章數(shù)據(jù)庫(kù)應(yīng)用回顧數(shù)據(jù)庫(kù)相關(guān)知識(shí)ADO.NET基本概念、結(jié)構(gòu)、組件使用Connection對(duì)象創(chuàng)建連接使用Command對(duì)象操作數(shù)據(jù)使用DataReader對(duì)象檢索數(shù)據(jù)使用DataAdapter對(duì)象和DataSet對(duì)象管理數(shù)據(jù)8.1.1關(guān)系數(shù)據(jù)庫(kù)模型數(shù)據(jù)庫(kù)

——以一定的組織形式存放在計(jì)算機(jī)存儲(chǔ)介質(zhì)上的相互關(guān)聯(lián)的數(shù)據(jù)的集合。關(guān)系數(shù)據(jù)庫(kù)

——是以關(guān)系模型來(lái)組織的。 關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表用數(shù)據(jù)庫(kù)保存數(shù)據(jù)的好處:數(shù)據(jù)庫(kù)中的數(shù)據(jù)實(shí)現(xiàn)了整體數(shù)據(jù)的結(jié)構(gòu)化數(shù)據(jù)的共享性好,冗余度低數(shù)據(jù)的獨(dú)立性高數(shù)據(jù)由DBMS統(tǒng)一管理和控制數(shù)據(jù)庫(kù)管理系統(tǒng)(DataBaseManagementSystme)專(zhuān)門(mén)用于管理數(shù)據(jù)庫(kù)的計(jì)算機(jī)系統(tǒng)軟件(DBMS)數(shù)據(jù)定義、建立、維護(hù)、查詢(xún)和統(tǒng)計(jì)對(duì)數(shù)據(jù)的完整性、一致性、安全性進(jìn)行控制著名的數(shù)據(jù)庫(kù)管理系統(tǒng):OracleSQLserverSybaseInformix數(shù)據(jù)庫(kù)管理系統(tǒng)的基本功能數(shù)據(jù)定義:(DataDescriptionLanguage)數(shù)據(jù)結(jié)構(gòu)、完整性約束、數(shù)據(jù)庫(kù)用戶(hù)、口令、存取權(quán)限等數(shù)據(jù)操縱:(DataManipulationLanguage)檢索、插入、修改和刪除數(shù)據(jù)庫(kù)運(yùn)行管理:并發(fā)控制、安全性檢驗(yàn)、完整性檢查、內(nèi)部維護(hù)數(shù)據(jù)組織、存儲(chǔ)管理:分類(lèi)組織存取數(shù)據(jù)數(shù)據(jù)庫(kù)的建立與維護(hù)數(shù)據(jù)通訊接口數(shù)據(jù)庫(kù)學(xué)習(xí)如何設(shè)計(jì)數(shù)據(jù)庫(kù)

范式、E-R圖如何使用數(shù)據(jù)庫(kù)

SQL語(yǔ)句(結(jié)構(gòu)化查詢(xún)語(yǔ)句) 編程中的調(diào)用方法學(xué)生選課信息學(xué)號(hào)姓名出生日期課程編號(hào)課程名稱(chēng)課程性質(zhì)課程學(xué)分成績(jī)21010101張芳1983-12-52112105C#語(yǔ)言基礎(chǔ)專(zhuān)修39021010102劉超1983-11-222112348管理信息系統(tǒng)選修2.58521010501林華1981-9-132121345VB程序設(shè)計(jì)選修37021010502王濤1981-7-82121331計(jì)算機(jī)信息檢索方向378學(xué)號(hào)姓名出生日期課程編號(hào)課程名稱(chēng)課程性質(zhì)課程學(xué)分成績(jī)21010101張芳1983-12-52112105C#語(yǔ)言基礎(chǔ)專(zhuān)修39021010101張芳1983-12-52112348管理信息系統(tǒng)選修2.58121010102劉超1983-11-222112348管理信息系統(tǒng)選修2.58521010501林華1981-9-132121345VB程序設(shè)計(jì)選修37021010502王濤1981-7-82121331計(jì)算機(jī)信息檢索方向378表8.1Students表StudentNoStudentNameSexbirthdayNativeAddress21010101張芳女1983-12-5江蘇南京南京農(nóng)業(yè)大學(xué)21010102劉超男1983-11-22江蘇南京南京農(nóng)業(yè)大學(xué)21010501林華男1981-9-13江蘇南京南京農(nóng)業(yè)大學(xué)列行主鍵學(xué)生信息管理系統(tǒng)

1.學(xué)生表(Students):用來(lái)描述學(xué)生的屬性2.課程表(Courses):用來(lái)描述課程的屬性3.成績(jī)表(Scores):用來(lái)記錄學(xué)生所學(xué)的課程對(duì)應(yīng)成績(jī)信息學(xué)生課程選修mn課程學(xué)號(hào)出生日期成績(jī)課程名稱(chēng)課程學(xué)分姓名課程號(hào)ER圖StudentNoStudentNameSexbirthdayNativeAddressCourseNoCourseNameCourseTypeOpenTermCourseHoursCreditStudentNoCourseNoScore物理模型(表設(shè)計(jì))根據(jù)數(shù)據(jù)庫(kù)類(lèi)型,指定表字段(屬性)的數(shù)據(jù)類(lèi)型,如數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型數(shù)據(jù)庫(kù)類(lèi)型數(shù)據(jù)庫(kù)字段類(lèi)型整型數(shù)字SQLServerint、bigintOracleintegerAccess數(shù)字、自動(dòng)編號(hào)字符SQLServerchar、Varchar、NvarcharOracledhar、NChar、Varchar2、NVarchar2、Access文本、備注實(shí)數(shù)SQLServerfloat、double、decimalOraclefloat、real、number、decimalAccess數(shù)字(帶精度)………………數(shù)據(jù)庫(kù)設(shè)計(jì)

ER圖——概念數(shù)據(jù)模型 物理數(shù)據(jù)模型 數(shù)據(jù)庫(kù)關(guān)系圖數(shù)據(jù)庫(kù)練習(xí):設(shè)計(jì)并創(chuàng)建數(shù)據(jù)庫(kù)1.認(rèn)識(shí)SQLServer2005Express或20002.設(shè)計(jì)數(shù)據(jù)庫(kù)以學(xué)生選課為例子3.新增數(shù)據(jù)庫(kù)新建表、新增/修改/刪除數(shù)據(jù)4.備份數(shù)據(jù)庫(kù)5.還原數(shù)據(jù)庫(kù)6.新增數(shù)據(jù)手工方式(非編程方式)學(xué)習(xí)SqlServer2000打開(kāi)SqlServer200企業(yè)管理器,使用Windows集成認(rèn)證或SQLserver認(rèn)證,進(jìn)入SqlServer2005Express新建數(shù)據(jù)庫(kù)右鍵點(diǎn)擊數(shù)據(jù)庫(kù),選擇新建數(shù)據(jù)庫(kù),在DatabaseName中輸入數(shù)據(jù)庫(kù)名稱(chēng)新建數(shù)據(jù)庫(kù)輸入數(shù)據(jù)庫(kù)名稱(chēng),選擇確定,這樣就可以創(chuàng)建數(shù)據(jù)庫(kù)。新增/修改/刪除表和數(shù)據(jù)實(shí)際操作舉例還原數(shù)據(jù)庫(kù)右鍵點(diǎn)擊數(shù)據(jù)庫(kù),選擇“還原數(shù)據(jù)庫(kù)”還原數(shù)據(jù)庫(kù)備份數(shù)據(jù)庫(kù)右鍵點(diǎn)擊需要備份的數(shù)據(jù)庫(kù),從任務(wù)中選擇備份練習(xí)示例實(shí)際操作舉例如何使用數(shù)據(jù)庫(kù)手工方式編程方式SQL語(yǔ)句(結(jié)構(gòu)化查詢(xún)語(yǔ)言)增/刪/改/查詢(xún)程序調(diào)用8.1.2結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)1.select語(yǔ)句——查詢(xún)

SELECT

select_list

[INTOnew_table]

FROM

table_source

[WHEREsearch_condition]

[GROUPBYgroup_by_expression]

[HAVINGsearch_condition]

[ORDERBYorder_expression[ASC|DESC]]

例如:SELECT*FROMCoursesSELECTCourseNo,CourseNameFROMCourses大小寫(xiě)不敏感SELECT

select_list

[INTOnew_table]

FROM

table_sourceselect_list的修飾符可以有ALL/DISTINCT/Topn[PERCENT]ALL-指定在結(jié)果集中可以顯示重復(fù)行。ALL為默認(rèn)設(shè)置DISTINCT——指定在結(jié)果集中只能顯示唯一行TOPn[PERCENT]——指定只從查詢(xún)結(jié)果集中輸出前n行。n是介于0和之間的整數(shù)。如果還指定了PERCENT,則只從結(jié)果集中輸出前百分之n行。當(dāng)指定時(shí)帶PERCENT時(shí),n必須是介于0和100之間的整數(shù)。select_list可以是*,也可以是用逗號(hào)分割的字段名INTO:創(chuàng)建新表并將結(jié)果行從查詢(xún)插入新表中FROM:從table_source表/視圖/結(jié)果集等中查詢(xún)數(shù)據(jù)結(jié)果集——利用聯(lián)接操作而得到SELECT*FROMtable1LEFTOUTERJOINtable2 ONtable1.c3=table2.c3SELECT*FROMtable1INNERJOINtable2 ONtable1.c3=table2.c3RightFull聯(lián)接操作的類(lèi)型INNER

指定返回所有相匹配的行對(duì)。廢棄兩個(gè)表中不匹配的行。如果未指定聯(lián)接類(lèi)型,則這是默認(rèn)設(shè)置。

LEFT[OUTER]指定除所有由內(nèi)聯(lián)接返回的行外,所有來(lái)自左表的不符合指定條件的行也包含在結(jié)果集內(nèi)。來(lái)自左表的輸出列設(shè)置為NULL。

RIGHT[OUTER]指定除所有由內(nèi)聯(lián)接返回的行外,所有來(lái)自右表的不符合指定條件的行也包含在結(jié)果集內(nèi)。來(lái)自右表的輸出列設(shè)置為NULL。

FULL[OUTER]如果來(lái)自左表或右表的某行與選擇準(zhǔn)則不匹配,則指定在結(jié)果集內(nèi)包含該行,并且將與另一個(gè)表對(duì)應(yīng)的輸出列設(shè)置為NULL。除此之外,結(jié)果集中還包含通常由內(nèi)聯(lián)接返回的所有行。

WHERE——設(shè)定查詢(xún)條件條件包括>、<、>=、<=、<>、LIKELike模糊查詢(xún)——通配符星號(hào)(*):0~n個(gè)字符問(wèn)號(hào)(?):1個(gè)字符多個(gè)條件:AND(與)、OR(或)、NOT(非)Select*fromScoreswherescore>=80Select*fromScoreswhereStudentNoLike’21*’Select*fromScoreswhereScore<=80ANDScore>=70OrderBy——排序按照指定字段進(jìn)行依次排序ASC指定按遞增順序,從最低值到最高值對(duì)指定列中的值進(jìn)行排序,默認(rèn)。DESC指定按遞減順序,從最高值到最低值對(duì)指定列中的值進(jìn)行排序。Select*fromscoresorderbyStudentNo,CourseNoGroupBy——分組指定用來(lái)放置輸出行的組如果SELECT子句<selectlist>中包含聚合函數(shù),則計(jì)算每組的匯總值。指定GROUPBY時(shí),選擇列表中任一非聚合表達(dá)式內(nèi)的所有列都應(yīng)包含在GROUPBY列表中,或者GROUPBY表達(dá)式必須與選擇列表表達(dá)式完全匹配。SELECTCourseNo,Count(CourseName)FROMCoursesGroupbyCourseNo,CourseName2.insert語(yǔ)句——向表中新增記錄insertintotableName(col1,col2,…,colN) Values(val1,val2,…,valN)表名列名(字段名)值InsertintoStudents(StudentNo,StudentName)Values(‘21010503’,’張小峰’)逗號(hào)相隔,不區(qū)分大小寫(xiě)3.Update語(yǔ)句——更新記錄UPDATEtableNameSETcolumn1=value1,column2=value2,…,columnN=valueN

WHEREconditionUPDATEStudentsSETStudentName='王鵬'WHEREStudentNo='21010503‘將學(xué)號(hào)為“21010503”的記錄中的StudentName字段內(nèi)容更新為“王鵬”。4.Delete語(yǔ)句——?jiǎng)h除記錄DELETEFROMtableNameWHEREconditionDELETEFROMStudentsWHEREStudentNoLIKE’210105*’將Students表中所有以210105開(kāi)頭的學(xué)號(hào)的記錄刪除高級(jí)應(yīng)用:視圖——View創(chuàng)建一個(gè)虛擬表,該表以另一種方式表示一個(gè)或多個(gè)表中的數(shù)據(jù)CREATEVIEW[<database_name>.][<owner>.]

view_name[(column[,...n])]

[WITH<view_attribute>[,...n]]

AS

select_statement

[WITHCHECKOPTION]

<view_attribute>::=

{ENCRYPTION|SCHEMABINDING|VIEW_METADATA}高級(jí)應(yīng)用:存儲(chǔ)過(guò)程——ProcedureCREATEPROC[EDURE]procedure_name[;number]

[{@parameterdata_type}

[VARYING][=default][OUTPUT]

][,...n]

[WITH

{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]

[FORREPLICATION]

ASsql_statement[...n]

——保存起來(lái)的可以接受和返回用戶(hù)提供的參數(shù)的Transact-SQL語(yǔ)句的集合執(zhí)行存儲(chǔ)過(guò)程——exec執(zhí)行存儲(chǔ)過(guò)程:[[EXEC[UTE]]

{

[@return_status

=]

{procedure_name[;number]|procedure_name_var

}

[[@parameter

=]{value|@variable[OUTPUT]|[DEFAULT]]

[,...n]

[WITHRECOMPILE]執(zhí)行字符串:EXEC[UTE]({@string_variable|[N]'tsql_string'}[+...n])顯示指定ID的用戶(hù)信息及LastName高級(jí)應(yīng)用:函數(shù)——Function一組Transact-SQL語(yǔ)句。可以從查詢(xún)中調(diào)用,也可以通過(guò)EXEC語(yǔ)句執(zhí)行CREATEFUNCTION[owner_name.]function_name

([{@parameter_name[AS]parameter_data_type[=default]}[,...n]])RETURNSscalar_return_data_type[WITH<function_option>[[,]...n]][AS]BEGIN

function_body

RETURNscalar_expression

END查詢(xún)數(shù)據(jù)庫(kù)記錄點(diǎn)擊NewQuery或新查詢(xún),也就是Sqlserver2000中的查詢(xún)分析器。查詢(xún)練習(xí):答案(a)NorthWind數(shù)據(jù)庫(kù)中Employees表中的所有信息。Select??? (b)NorthWind數(shù)據(jù)庫(kù)中員工(Employees表)lastname為Peacock,分類(lèi)名稱(chēng)為Seafood的所有訂單(order)的前100條信息。

selecttop100???課堂練習(xí)1.Select*fromemployees2.SELECTTOP100dbo.Orders.*FROMdbo.ProductsINNERJOINdbo.[OrderDetails]ON dbo.Products.ProductID=dbo.[OrderDetails].ProductIDINNERJOINdbo.CategoriesONdbo.Products.CategoryID=dbo.Categories.CategoryIDINNERJOINdbo.EmployeesINNERJOINdbo.OrdersONdbo.Employees.EmployeeID=dbo.Orders.EmployeeIDONdbo.[OrderDetails].OrderID=dbo.Orders.OrderIDWHERE(dbo.Employees.LastName='Peacock')AND(dbo.Categories.CategoryName='seafood')修改數(shù)據(jù)庫(kù)記錄修改練習(xí):答案(a)在NorthWind數(shù)據(jù)庫(kù)中的Employees表中新增一條記錄,EmployeeID=10,LastName=‘MyName’,F(xiàn)irstName=’MyFirstName’。Insert???(b)修改NorthWind數(shù)據(jù)庫(kù)中Employees表中EmployeeID=8的員工信息,將lastname改為PeacockMY。

update???課堂練習(xí)Insertintoemployees(employeeid,lastname,firstname)values(10,’MyName’,’MyFirstName’)Updateemployeessetlastname=‘PeacockMy’whereEmployeeID=8視圖練習(xí):答案在NorthWind數(shù)據(jù)庫(kù)中的Employees表中新增一個(gè)視圖MyView,用于顯示所有產(chǎn)品的供應(yīng)商信息。View????存儲(chǔ)過(guò)程練習(xí):新增存儲(chǔ)過(guò)程1,實(shí)現(xiàn)查詢(xún)所有員工信息。新增存儲(chǔ)過(guò)程2,實(shí)現(xiàn)查詢(xún)編號(hào)為8的員工信息。新增存儲(chǔ)過(guò)程3,實(shí)現(xiàn)查詢(xún)編號(hào)為8的員工LastName,并使用output參數(shù)返回。在查詢(xún)分析器中的執(zhí)行存儲(chǔ)過(guò)程Exec存儲(chǔ)過(guò)程名參數(shù)課堂練習(xí)SELECTdbo.Products.*,dbo.Suppliers.CompanyNameFROMdbo.SuppliersRIGHTOUTERJOINdbo.ProductsONdbo.Suppliers.SupplierID=dbo.Products.SupplierID存儲(chǔ)過(guò)程:1.CREATEPROCEDUREmyProc1ASselect*fromemployeesGO3.createPROCEDURE[dbo].[myproc2] @employeeidint,@lastnamevarchar(200)outputASBEGIN select@lastname=lastnamefromemployeeswhereemployeeid=@employeeidENDGOdeclare@lastnamevarchar(1020)execmyproc2'8',@lastnameoutputprint@lastname函數(shù)練習(xí):答案新增自定義函數(shù),完成如下功能:計(jì)算某一個(gè)供應(yīng)商提供的所有產(chǎn)品的平均價(jià)格提示:在product表中unitprice為產(chǎn)品價(jià)格,supplierid為供應(yīng)商編號(hào)fucntion????利用用戶(hù)自定義函數(shù)查詢(xún)supplierid=1的所有產(chǎn)品平均價(jià)格,并print出來(lái)??課堂練習(xí)CREATEFUNCTIONmyFunction( @supplieridint)RETURNSfloatASBEGINdeclare@averpricefloatselect@averprice=avg(unitprice)fromproductswheresupplierid=@supplieridgroupbysupplieridreturn@averpriceENDGO調(diào)用:selectdbo.myfunction('1')asmyprice或printdbo.myfunction('1')注意使用幫助——聯(lián)機(jī)叢書(shū)課外思考題學(xué)生學(xué)習(xí)管理----?ER圖?若干學(xué)生組成一個(gè)班級(jí)每個(gè)班級(jí)設(shè)立一個(gè)學(xué)生作為班長(zhǎng)管理相關(guān)事務(wù)每個(gè)學(xué)生可以選擇多門(mén)課程學(xué)習(xí),每門(mén)課程也可以由多個(gè)學(xué)生選擇每門(mén)課程有相關(guān)先修課程教師可以講授多門(mén)課程,并可以分別選擇多本教材8.2ADO.NET概述8.2.1ADO.NET基本概念與特點(diǎn)ADO(ActiveXDataObjects)是一個(gè)COM組件庫(kù),主要包含Connection、Command、Recordset和Field對(duì)象。ADO.NET附帶了4個(gè)數(shù)據(jù)庫(kù)客戶(hù)命名空間System.Data.SqlClient——用于SQLServerSystem.Data.OracleClient——用于OracleSystem.Data.Odbc——用于ODBC數(shù)據(jù)源System.Data.OleDb——用于通過(guò)OLEBC實(shí)現(xiàn)的數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)用戶(hù)需要時(shí),可以隨時(shí)訪問(wèn)數(shù)據(jù)用戶(hù)計(jì)算機(jī)向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送請(qǐng)求客戶(hù)端不同的訪問(wèn)方法和技術(shù)ADO.NET打開(kāi)數(shù)據(jù)庫(kù)操作數(shù)據(jù)庫(kù)關(guān)閉數(shù)據(jù)庫(kù)打開(kāi)連接生成操作命令讀寫(xiě)操作命令數(shù)據(jù)集關(guān)閉連接數(shù)據(jù)適配器8.2.2ADO.NET對(duì)象模型的結(jié)構(gòu)Connection對(duì)象DataAdapter對(duì)象Command對(duì)象DataReader對(duì)象DataSet對(duì)象WinFormWebForm其他應(yīng)用程序ADO.NET數(shù)據(jù)提供程序

1、數(shù)據(jù)提供程序(DataProvider)

——托管提供程序 負(fù)責(zé)與物理數(shù)據(jù)源的連接2、數(shù)據(jù)集(DataSet) 代表實(shí)際的數(shù)據(jù)ADO.NET的對(duì)象模型的組成

數(shù)據(jù)提供程序(DataProvider)根據(jù)物理數(shù)據(jù)源類(lèi)型的不同,有不同的數(shù)據(jù)提供程序:1、SQLServer對(duì)象 ——Sql前綴2、Oracle對(duì)象 ——Oracle前綴3、ODBC對(duì)象 ——Odbc前綴4、OLEDB對(duì)象 ——OleDb前綴1、Connection對(duì)象

——表示與一個(gè)數(shù)據(jù)源的物理連接打開(kāi)和關(guān)閉連接,改變數(shù)據(jù)庫(kù)和管理事務(wù)2、Command對(duì)象

——代表在數(shù)據(jù)源上執(zhí)行的一條SQL對(duì)象和一個(gè)存儲(chǔ)過(guò)程

1)獨(dú)立地創(chuàng)建和執(zhí)行不同的Command對(duì)象

2)使用DataAdapter對(duì)象 包含4個(gè)Command對(duì)象3、DataReader對(duì)象

——用于從數(shù)據(jù)源中獲取僅轉(zhuǎn)發(fā)的、只讀的數(shù)據(jù)源,往往用于顯示查詢(xún)的結(jié)果。不能用代碼直接創(chuàng)建,只能通過(guò)調(diào)用Command對(duì)象的ExecuteReader()方法來(lái)創(chuàng)建4、DataAdapter對(duì)象(數(shù)據(jù)適配器)

——用于Connection對(duì)象和DataSet數(shù)據(jù)集的數(shù)據(jù)通信。管理了4個(gè)Command對(duì)象:

1、SelectCommand對(duì)象

2、UpdateCommand對(duì)象

3、InsertCommand對(duì)象

4、DeleteCommand對(duì)象填充DataSet數(shù)據(jù)集

——Fill()方法

更新、插入、刪除數(shù)據(jù)

——Update()方法

數(shù)據(jù)集——DataSet記錄在內(nèi)存中的數(shù)據(jù),結(jié)構(gòu)如圖8.2所示離線數(shù)據(jù)庫(kù)

1、離線的關(guān)系數(shù)據(jù)庫(kù),數(shù)據(jù)來(lái)源多樣2、數(shù)據(jù)集由兩個(gè)基本對(duì)象組成:

1)DataTableCollection

包含零個(gè)或多個(gè)DataTable對(duì)象 每個(gè)DataTable對(duì)象由Columns集合、Rows集合和Constraints集合構(gòu)成

2)DataRelationCollection

包含零個(gè)或多個(gè)DataRelation對(duì)象。3、訪問(wèn)DataSet的方式:

1)作為關(guān)系數(shù)據(jù)庫(kù)中的表

2)作為XML(可擴(kuò)展標(biāo)記語(yǔ)言)結(jié)構(gòu)數(shù)據(jù)8.3創(chuàng)建連接8.3.1Connection連接字符串——ConnectionString1、用于提供登錄數(shù)據(jù)庫(kù)和指向特定數(shù)據(jù)庫(kù)所需的信息2、唯一的非只讀屬性語(yǔ)法舉例:''Provider=SQLOLEDB;DataSource=MSSQLServer;InitialCatalog=MyDB;IntegratedSecurity=SSPI''Connection對(duì)象負(fù)責(zé):數(shù)據(jù)庫(kù)連接和事務(wù)管理1、數(shù)據(jù)庫(kù)服務(wù)器名2、IP地址3、4、localhost5、(local)或(local)\SQLExpress6、.或.\SQLExpress數(shù)據(jù)服務(wù)器的幾種表示方法:1.與SQLServer數(shù)據(jù)庫(kù)的連接Windows集成安全性認(rèn)證方式:(1)SQLClient方式的字符串如下:''DataSource=;PersistSecurityInfo=False;InitialCatalog=MyDB;IntegratedSecurity=SSPI;'‘(2)OLEDB方式的字符串如下:''Provider=SQLOLEDB;DataSourse=;PersistSecurityInfo=False;InitialCatalog=MyDB;IntegratedSecurity=SSPI;'‘(3)ODBC方式的字符串如下:''Driver={SQLServer};Server=;Database=MyDB;Trusted_Connection=Yes;UID=Administrator''1.與SQLServer數(shù)據(jù)庫(kù)的連接SQLServer身份認(rèn)證方式:(1)SQLClient方式的字符串如下:’’DataSource=UPC-CHENC;InitialCatalog=Northwind;UserID=sa’’(2)OLEDB方式的字符串如下:''Provider=SQLOLEDB;DataSource=.;UserID=sa;InitialCatalog=Northwind'‘''Provider=SQLOLEDB;DataSource=localhost;Database=NorthWind;UID=sa;PWD=pwd;''2.與Access數(shù)據(jù)庫(kù)的連接設(shè)Access2000數(shù)據(jù)庫(kù)文件的路徑為C:\data.mdb(1)OLEDB方式:''Provider=Microsoft.Jet.OLEDB.4.0;UserID=Admin;DataSource=C:\data.mdb;'‘(2)ODBC方式:''Driver={MicrosoftAccessDriver(*.mdb)};DBQ=C:\data.mdb;UID=admin;''常用8.3.2創(chuàng)建并使用連接對(duì)象connection對(duì)象的兩種創(chuàng)建方式:1)使用帶參數(shù)的構(gòu)造函數(shù):System.Data.SqlClient.SqlConnectionconn=newSystem.Data.SqlClient.SqlConnection(''Provider=Microsoft.Jet.OLEDB.4.0;UserID=Admin;DataSource=C:\\data.mdb;'');2)使用無(wú)參數(shù)構(gòu)造函數(shù),然后修改ConnectionString屬性::System.Data.SqlClient.SqlConnectionconn=newSystem.Data.SqlClient.SqlConnection();conn.ConnectionString=''Provider=Microsoft.Jet.OLEDB.4.0;UserID=Admin;DataSource=C:\\data.mdb;'';打開(kāi)連接:Open() ——建立一個(gè)打開(kāi)的連接關(guān)閉連接:Close() ——關(guān)閉已打開(kāi)的連接常用的數(shù)據(jù)連接打開(kāi)與關(guān)閉方法:利用try…catch…finally語(yǔ)句塊確保在finally塊中關(guān)閉任何已打開(kāi)的連接。

try{ //Opentheconnection

conn.Open(); //Dosomethinguseful}catch(Exceptionex){ //Dosomethingabouttheexception}finally{ //Ensurethattheconnectionisfreed

conn.Close();}2.使用using語(yǔ)句塊using語(yǔ)句塊保證在退出語(yǔ)句塊時(shí)實(shí)現(xiàn)對(duì)象能立即釋放。stringsource="server=(local)\\NetSDK;"+"integratedsecurity=SSPI;"+"database=Northwind";using(SqlConnectionconn=newSqlConnection(source)){ //Opentheconnection conn.Open(); //Dosomethinguseful}8.3.3事務(wù)處理1、使用事務(wù)處理的目的:保證在數(shù)據(jù)更新過(guò)程中數(shù)據(jù)操作的安全與一致2、大型數(shù)據(jù)庫(kù)服務(wù)器都支持事務(wù)處理3、事務(wù)處理的方法:

通過(guò)Connection對(duì)象的BeginTransaction方法實(shí)現(xiàn)usingSystem.Data.SqlClient;stringconnString="datasource=;persistsecurityinfo=False;initialcatalog=MyDB;integratedsecurity=SSPI;";SqlConnectionconn=newSqlConnection(connString);SqlTransactiontx;try{ conn.Open(); //打開(kāi)數(shù)據(jù)連接

tx=conn.BeginTransaction(); //執(zhí)行數(shù)據(jù)操作

tx.Commit(); //提交事務(wù)}catch(Exceptionex){ tx.Rollback(); //回滾事務(wù)}finally{ conn.Close();}事務(wù)處理的例子:8.4使用Command對(duì)象與DataReader對(duì)象

8.4.1簡(jiǎn)介Command對(duì)象——根據(jù)設(shè)置的SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。DataReader對(duì)象——使用ExecuteReader方法返回的結(jié)果集不同的數(shù)據(jù)源有不同的Command對(duì)象和DataReader對(duì)象:1、OleDbCommand和OleDbDataReader——System.Data.OleDb(NameSpace)2、SqlCommand和SqlDataReader——System.Data.SqlClient(NameSpace)8.4.2使用Command對(duì)象操作數(shù)據(jù)1.Command對(duì)象的建立構(gòu)造函數(shù)含義Command()創(chuàng)建一個(gè)默認(rèn)數(shù)據(jù)命令實(shí)例Command(cmdTxt)創(chuàng)建一個(gè)數(shù)據(jù)命令實(shí)例,設(shè)置CommandText屬性為參數(shù)cmdTxt中指定的字符串Command(cmdTxt,conn)…,設(shè)置Connection屬性為conn中指定的數(shù)據(jù)連接對(duì)象Commnad(cmdTxt,conn,trans)…,設(shè)置Transcation屬性為參數(shù)trans中指定的事務(wù)對(duì)象2.Command對(duì)象的屬性(1)CommandText屬性——是字符串屬性,包含要執(zhí)行的SQL語(yǔ)句或數(shù)據(jù)源中存儲(chǔ)過(guò)程的名字;(2)Connection屬性——指定要執(zhí)行數(shù)據(jù)命令的連接對(duì)象,即指定要執(zhí)行數(shù)據(jù)操作的數(shù)據(jù)源;(3)Transaction屬性——指定執(zhí)行數(shù)據(jù)命令登記的事務(wù)對(duì)象。(4)CommandTimeout屬性——決定數(shù)據(jù)命令出錯(cuò)前等待服務(wù)器響應(yīng)的時(shí)間。2.Command對(duì)象的屬性(5)CommandType屬性——命令類(lèi)型,是SQL語(yǔ)句(Text,默認(rèn))還是存儲(chǔ)過(guò)程(StoredProcedure)、返回表(TableDirect,僅OleDbCommand支持)(6)Parameters屬性——命令參數(shù),增加參數(shù)方法Add、Insert,去除參數(shù)方法Remove、RemoveAt(7)UpdatedRowSource屬性——決定Command對(duì)象在執(zhí)行存儲(chǔ)過(guò)程時(shí)如何使用輸出的參數(shù)。

Both:將輸出參數(shù)和第一個(gè)返回行都映射到DataSet中的已更改的行。

FirstReturnedRecord:將第一個(gè)返回行中的數(shù)據(jù)映射到DataSet中的已更改的行。

None:忽略任何返回的參數(shù)或行。

OutputParameters:將輸出參數(shù)映射到DataSet中的已更改的行。3.執(zhí)行數(shù)據(jù)命令CommandType屬性要與CommandText屬性對(duì)應(yīng)Text ——SQL語(yǔ)句StoredProcedure ——存儲(chǔ)過(guò)程構(gòu)造函數(shù)含義ExecuteeNonQuery()執(zhí)行一個(gè)命令(update,insert,detele)但不返回結(jié)果集ExecuteReader()執(zhí)行一個(gè)命令返回一個(gè)DataReader對(duì)象ExecuteScalar()執(zhí)行一個(gè)命令返回一個(gè)值(結(jié)果集的第一行第一列)ExecuteXmlReader()SqlCommand專(zhuān)有的方法,執(zhí)行一個(gè)命令,返回一個(gè)XmlReader對(duì)象,可用于傳送數(shù)據(jù)庫(kù)中返回的XML代碼段Command對(duì)象用于執(zhí)行命令的相關(guān)方法如表8.6所示。【例8.1】使用Command對(duì)象的ExecuteNonQuery方法執(zhí)行SQL語(yǔ)句。

usingSystem;usingSystem.Data.SqlClient;publicclassExecuteNonQueryExample1{publicstaticvoidMain(string[]args){ //連接字符串,連接本地的MSSQLServer服務(wù)器stringconnString="datasource=;persistsecurityinfo=False;initialcatalog=MyDB;integratedsecurity=SSPI;"; //SQL語(yǔ)句,更新Students表中的學(xué)生姓名

stringsqlString="UPDATEStudentsSETStudentName='王鵬'"+ "WHEREStudentNo='21010503'";

SqlConnectionconn=newSqlConnection(connString);

conn.Open(); //打開(kāi)連接

SqlCommandcmd=newSqlCommand(sqlString,conn); //建立數(shù)據(jù)命令對(duì)象

introwsReturned=cmd.ExecuteNonQuery(); //執(zhí)行命令,返回影響的行數(shù)

Console.WriteLine("{0}記錄已更新",rowsReturned); conn.Close(); //關(guān)閉連接}}練習(xí)一下insert語(yǔ)句和delete語(yǔ)句首先創(chuàng)建數(shù)據(jù)庫(kù)MyDB(學(xué)生信息管理)數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程如下:--填入客戶(hù)表CREATEPROCEDUREPRO_INSERT_CUSTOMER @Customer varchar(50), @Contact varchar(50), @Address varchar(200), @resultint OUTPUTAS SELECT@result=MAX(CustomerNo)+1FROMCustomers IF@resultISNULL SET@result=1 INSERTINTOCustomers(CustomerNo,Constomer,Contact,Address)VALUES(@result,@Customer,@Contact,@Address)GO

該存儲(chǔ)過(guò)程接受三個(gè)參數(shù)作為字段客戶(hù)名稱(chēng)、聯(lián)系人和聯(lián)系地址的值,并生成一個(gè)唯一整數(shù)作為客戶(hù)標(biāo)識(shí)插入數(shù)據(jù)庫(kù),最后將生成的客戶(hù)標(biāo)識(shí)作為輸出參數(shù)返回?!纠?.2】使用Command對(duì)象的ExecuteNonQuery方法執(zhí)行存儲(chǔ)過(guò)程

【例8.2】使用Command對(duì)象的ExecuteNonQuery方法執(zhí)行存儲(chǔ)過(guò)程

usingSystem;usingSystem.Data;usingSystem.Data.SqlClient;publicclassExecuteNonQueryExample2{publicstaticvoidMain(string[]args){//連接字符串,連接本地的MSSQLServer服務(wù)器stringconnString="datasource=;persistsecurityinfo=False;initialcatalog=MyDB;integratedsecurity=SSPI;";//建立連接對(duì)象,打開(kāi)連接SqlConnectionconn=newSqlConnection(connString);conn.Open();

//建立數(shù)據(jù)命令對(duì)象,設(shè)定數(shù)據(jù)命令類(lèi)型為存儲(chǔ)過(guò)程SqlCommandcmd=newSqlCommand("PRO_INSERT_CUSTOMER",conn);cmd.CommandType=CommandType.StoredProcedure;//定義存儲(chǔ)過(guò)程輸入?yún)?shù)cmd.Parameters.Add(newSqlParameter("@Customer",SqlDbType.VarChar,50,"Customer"));

cmd.Parameters.Add(newSqlParameter("@Contact",SqlDbType.VarChar,50,"Contact"));cmd.Parameters.Add(newSqlParameter("@Address",SqlDbType.VarChar,200,"Address"));//定義輸出參數(shù)cmd.Parameters.Add(newSqlParameter("@result",SqlDbType.VarChar,200,ParameterDirection.Output,false,0,0,CustomerNo",DataRowVersion.Default,null));cmd.UpdatedRowSource=UpdateRowSource.OutputParameters; //設(shè)定輸入?yún)?shù)的值cmd.Parameters["@Customer"].Value="星光機(jī)械廠";cmd.Parameters["@Contact"].Value="張三";cmd.Parameters["@Address"].Value="長(zhǎng)江路111號(hào)"; //執(zhí)行數(shù)據(jù)命令cmd.ExecuteNonQuery(); //獲得輸出參數(shù)值并顯示在命令行Console.WriteLine("插入的客戶(hù)ID是:{0}",cmd.Parameters["@result"].Value); //關(guān)閉連接conn.Close(); }}【例8.3】使用Command對(duì)象的ExecuteScalar方法執(zhí)行SQL語(yǔ)句。usingSystem;usingSystem.Data.SqlClient;publicclassExecuteScalarExample{publicstaticvoidMain(string[]args){//連接字符串,連接本地的MSSQLServer服務(wù)器stringconnString="datasource=;persistsecurityinfo=False;initialcatalog=MyDB;integratedsecurity=SSPI;";//SQL語(yǔ)句,查詢(xún)Customers表中的記錄數(shù)stringsqlString="SELECTCOUNT(*)FROMStudents";SqlConnectionconn=newSqlConnection(connString);conn.Open();//打開(kāi)連接

//建立數(shù)據(jù)命令對(duì)象SqlCommandcmd=newSqlCommand(sqlString,conn); obejcto=cmd.ExecuteScalar();//執(zhí)行命令,返回影響的行數(shù)Console.WriteLine("記錄數(shù)為:{0}",o);conn.Close();//關(guān)閉連接}}8.4.3使用DataReader對(duì)象檢索數(shù)據(jù)DataReader對(duì)象——返回結(jié)果集

1)提供了一個(gè)只讀的、單向的游標(biāo),用于訪問(wèn)結(jié)果集的行

2)DataReader需要的開(kāi)銷(xiāo)很少,效率很高,因?yàn)閮?nèi)存中每次僅有一個(gè)數(shù)據(jù)行

3)DataReader對(duì)象不能直接實(shí)例化,必須通過(guò)Command對(duì)象的ExecuteReader方法來(lái)生成

4)DataReader對(duì)象最主要的方法是Read方法,用來(lái)檢索行,然后用數(shù)組來(lái)訪問(wèn)行中的字段

5)在DataReader遍歷記錄時(shí),數(shù)據(jù)連接必須保持打開(kāi)狀態(tài),直到DataReader對(duì)象被關(guān)閉為止【例8.4】使用Command對(duì)象和DataReader對(duì)象獲取數(shù)據(jù)。usingSystem;usingSystem.Data.SqlClient;publicclassExecuteReaderExample{publicstaticvoidMain(string[]args){//連接字符串,連接本地的MSSQLServer服務(wù)器stringconnString="datasource=;persistsecurityinfo=False;"+ "

initialcatalog=MyDB;integratedsecurity=SSPI;";

stringsqlString="SELECT*FROMStudents";SqlConnectionconn=newSqlConnection(connString);//建立連接對(duì)象conn.Open();//打開(kāi)連接SqlCommandcmd=newSqlCommand(sqlString,conn);SqlDataReaderrdr=cmd.ExecuteReader(); //迭代結(jié)果集中的行,直到讀完最后一條記錄Read方法返回falsewhile(rdr.Read()){ Console.WriteLine("{0},{1},{2},{3},{4},{5}",rdr[0],rdr["StudnetName"],

rdr["Sex"],rdr["Birthday"],rdr["Native"],rdr["Address"]);}rdr.Close();//關(guān)閉DataReaderconn.Close(); //關(guān)閉連接}}8.5使用DataAdapter對(duì)象與DataSet對(duì)象8.5.1使用DataSet對(duì)象管理數(shù)據(jù)DataSet——內(nèi)存數(shù)據(jù)庫(kù) 離線數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù)/XML文件/程序代碼)屬性含義Tables數(shù)據(jù)集中數(shù)據(jù)表的集合,是一個(gè)DataTabelCollection集合類(lèi),通過(guò)集合類(lèi)的通用操作方法Add、Remove等來(lái)添加、刪除數(shù)據(jù)庫(kù)DataTable對(duì)象Relations數(shù)據(jù)集中數(shù)據(jù)關(guān)系的集合,DataRelationCollection集合類(lèi),通過(guò)集合類(lèi)的通用操作方法Add、Remove等來(lái)添加、刪除數(shù)據(jù)庫(kù)DataRelation對(duì)象ExtendedProperties與DataSet相關(guān)的自定義用戶(hù)信息的集合HasErrors判斷DataSet中的任一DataTable對(duì)象是否存在錯(cuò)誤DataSetName當(dāng)前DataSet的名稱(chēng)CaseSenstive字符串比較是否區(qū)分大小寫(xiě)Locate數(shù)據(jù)表中字符串的區(qū)域設(shè)置信息DataSet對(duì)象的常用屬性2.?dāng)?shù)據(jù)集中DataTable對(duì)象的構(gòu)建DataSet類(lèi)的Tables屬性

——一個(gè)包含數(shù)據(jù)表的集合構(gòu)造DataTable類(lèi)對(duì)象

——使用無(wú)參數(shù)的構(gòu)造函數(shù)和帶表名參數(shù)的構(gòu)造函數(shù)。DataTable類(lèi)的一些屬性:

1、Columns屬性是該表的列的集合;

2、Rows屬性是該表的行的集合;

3、PrimaryKey屬性是該表主鍵的列的數(shù)組;

4、MinimumCapacity屬性是該表最初的大?。ㄓ涗浶袛?shù),默認(rèn)為25);

5、ParentRelations和ChildRelations屬性是該表的父、子關(guān)系的集合。DataTable對(duì)象的Columns屬性

——一個(gè)包含數(shù)據(jù)表的列的集合,存儲(chǔ)DataColumn對(duì)象。構(gòu)造函數(shù)如表8.8所示。3.數(shù)據(jù)表的字段(列)操作1、ColumnName屬性指定列的名稱(chēng)

2、DataType屬性指定該列的數(shù)據(jù)類(lèi)型,默認(rèn)類(lèi)型為String*3、Expression屬性為該列指定一個(gè)表達(dá)式字符串

4、ColumnMapping屬性指定該列和XML元素的映射方式

5、AllowDBNull屬性用來(lái)獲取或設(shè)置在行中該列是否允許空值

6、Caption屬性用來(lái)獲取或設(shè)置列的標(biāo)題,若沒(méi)有設(shè)置,則返回ColumnName的值,它常常用來(lái)顯示DataColumn的描述文字或友好名稱(chēng)

7、Ordinal屬性用來(lái)獲取在集合中的位置(索引)

8、ReadOnly屬性用來(lái)指定該列在行中是否不允許修改

9、Unique屬性用來(lái)指定該列在每一行中的值是否必須是唯一

10、DefaultValue屬性用來(lái)指定在創(chuàng)建新行時(shí)該列的默認(rèn)值

11、MaxLength屬性用來(lái)獲取或設(shè)置文本列的最大長(zhǎng)度(字符個(gè)數(shù))

12、AutoIncrement屬性:指定添加新行時(shí)該列的值是否自動(dòng)遞增

13、AutoIncrementStep屬性:指定添加新行時(shí)該列的值自動(dòng)遞增時(shí),增量的大?。J(rèn))

14、AutoIncrementSeed屬性分別用來(lái)指定添加新行時(shí)該列的值自動(dòng)遞增時(shí),列的起始值。

15、通過(guò)調(diào)用Columns集合的Add、AddRange、Insert、Remove和Clear方法可分別進(jìn)行列的添加、插入、刪除和清除操作。DataColumn類(lèi)的一些屬性:利用AddRange方法構(gòu)造學(xué)生信息管理系統(tǒng)中數(shù)據(jù)表Score的列結(jié)構(gòu)。DataTabledataTable1=newDataTable();dataTable1.TableName="Score";DataColumndataColumn1=newDataColumn();DataColumndataColumn2=newDataColumn();DataColumndataColumn3=newDataColumn();dataColumn1.Caption="學(xué)號(hào)";dataColumn1.ColumnName="studentno";dataColumn1.MaxLength=8;dataColumn2.Caption="課程號(hào)";dataColumn2.ColumnName="courseno";dataColumn2.MaxLength=8;dataColumn3.Caption="成績(jī)";dataColumn3.ColumnName="score";dataColumn3.DataType=typeof(Single);DataColumn[]cols=newDataColumn[3];cols[0]=dataColumn1;cols[1]=dataColumn2;cols[2]=dataColumn3;dataTable1.Columns.AddRange(cols);4.數(shù)據(jù)表的記錄(行)操作DataTable類(lèi)的Rows屬性

——一個(gè)包含數(shù)據(jù)表的行的集合,存儲(chǔ)DataRow類(lèi)對(duì)象。DataRow類(lèi)封裝了數(shù)據(jù)表中行的所有操作。DataRow類(lèi)的RowState屬性反映了記錄行的操作狀態(tài)

DataRowState枚舉值:

Added(已添加)——當(dāng)調(diào)用Rows集合的Add或AddRange方法添加記錄行時(shí)

Deleted(已刪除)——當(dāng)調(diào)用DataRow類(lèi)的Delete方法

Detached(已創(chuàng)建)——當(dāng)調(diào)用DataTable類(lèi)的NewRow方法時(shí)

Modified(已修改)——當(dāng)通過(guò)DataRow類(lèi)的Item屬性來(lái)指定該行的字段值時(shí)

Unchanged(未更改)——當(dāng)調(diào)用AcceptChanges方法時(shí)通過(guò)RowState屬性,DataRow可以維護(hù)數(shù)據(jù)行的不同狀態(tài),直到使用AcceptChanges方法確認(rèn)更新或RejectChanges方法取消更新。(1)添加記錄行按下列步驟操作:①使用DataTable對(duì)象的NewRow方法創(chuàng)建一個(gè)DataRow對(duì)象②指定DataRow對(duì)象中不同字段的值③調(diào)用DataTable對(duì)象Rows集合屬性的Add方法添加記錄行④調(diào)用DataTable類(lèi)的AcceptChanges方法接受該表進(jìn)行的所有更改例如,下面的代碼向Scores表中添加一個(gè)記錄。DataRowrow1=dataTable1.NewRow();row1[0]="21010101"; //學(xué)號(hào)row1[1]="2112105"; //課程號(hào)row1[2]="80.0"; //成績(jī)dataTable1.Rows.Add(row1);dataTable1.AcceptChanges(); //接受更改(2)查找記錄行——使用Rows集合的Find方法查找指定主鍵值的記錄行。方法參數(shù)是要查找的主鍵值或主鍵值的數(shù)組。例如在Scores表中查找學(xué)號(hào)為“21010102”的記錄行:DataRowfindRow=dataTable1.Rows.Find("21010102");if(findRow!=null) //查找到{ //TODO… }需要說(shuō)明的是,在通過(guò)Find方法查找記錄行時(shí),該表需指定主鍵才能進(jìn)行查找。(3)修改記錄行按下列步驟進(jìn)行:①獲取指定記錄行的DataRow對(duì)象;②調(diào)用DataRow對(duì)象的BeginEdit方法進(jìn)入記錄行的編輯模式;③更改該記錄行的列的值;④調(diào)用DataRow對(duì)象的EndEdit方法退出記錄行的編輯模式;⑤調(diào)用DataRow對(duì)象的AcceptChanges方法接受對(duì)該行的所有修改,或調(diào)用所在DataTable對(duì)象的AcceptChanges方法接受對(duì)該表進(jìn)行的所有更改。(4)刪除記錄行先使用DataRow類(lèi)的Delete方法來(lái)刪除,然后調(diào)用

DataRow類(lèi)的AcceptChanges方法接受刪除B)直接調(diào)用Rows集合的Remove方法。

1.DataSet對(duì)象的構(gòu)建通過(guò)窗體設(shè)計(jì)器可以很方便地添加DataSet組件?!纠?.5】

添加DataSet組件。(1)創(chuàng)建一個(gè)Windows窗體應(yīng)用程序項(xiàng)目Ex_9_DataSet。(2)在工具箱中,單擊“數(shù)據(jù)”標(biāo)簽項(xiàng),彈出所有與“數(shù)據(jù)”操作相關(guān)的組件。(3)將工具箱中的DataSet組件拖放到窗體上,此時(shí)彈出一個(gè)“添加數(shù)據(jù)集”對(duì)話(huà)框,用來(lái)選擇“類(lèi)型化數(shù)據(jù)集”或“非類(lèi)型化數(shù)據(jù)集”,如圖8.3所示。(4)若選中“類(lèi)型化數(shù)據(jù)集”選項(xiàng),則將創(chuàng)建已經(jīng)存在于項(xiàng)目中的數(shù)據(jù)集類(lèi)的一個(gè)實(shí)例(數(shù)據(jù)架構(gòu)已定義);若選中“非類(lèi)型化數(shù)據(jù)集”選項(xiàng),則創(chuàng)建一個(gè)類(lèi)型為System.Data.Dataset的數(shù)據(jù)集,通常,若以編程方式定義數(shù)據(jù)集架構(gòu),如添加數(shù)據(jù)表和列,則需要選中此項(xiàng)。(5)本例中我們選中“非類(lèi)型化數(shù)據(jù)集”選項(xiàng),單擊“確定”按鈕,將添加DataSet組件對(duì)象dataSet1。(6)單擊窗體模板下方的dataSet1圖標(biāo),將在其屬性窗口中顯示該DataSet組件對(duì)象的全部屬性,通過(guò)修改Name屬性可以更改該組件的實(shí)例名稱(chēng),通過(guò)修改DataSetName屬性可以設(shè)置該DataSet組件的名稱(chēng),默認(rèn)為NewDataSet??梢栽谶\(yùn)行時(shí)通過(guò)代碼來(lái)建立數(shù)據(jù)集,這只要直接調(diào)用數(shù)據(jù)集的構(gòu)造函數(shù)創(chuàng)建一個(gè)新的實(shí)例即可,例如:DataSetds=newDataSet();2.?dāng)?shù)據(jù)集中DataTable對(duì)象的構(gòu)建DataSet類(lèi)的Tables屬性

——一個(gè)包含數(shù)據(jù)表的集合構(gòu)造DataTable類(lèi)對(duì)象

——使用無(wú)參數(shù)的構(gòu)造函數(shù)和帶表名參數(shù)的構(gòu)造函數(shù)。DataTable類(lèi)的一些屬性:

1、Columns屬性是該表的列的集合;

2、Rows屬性是該表的行的集合;

3、PrimaryKey屬性是該表主鍵的列的數(shù)組;

4、MinimumCapacity屬性是該表最初的大?。ㄓ涗浶袛?shù),默認(rèn)為25);

5、ParentRelations和ChildRelations屬性是該表的父、子關(guān)系的集合。DataTable對(duì)象的Columns屬性

——一個(gè)包含數(shù)據(jù)表的列的集合,存儲(chǔ)DataColumn對(duì)象。構(gòu)造函數(shù)如表8.8所示。3.數(shù)據(jù)表的字段(列)操作1、ColumnName屬性指定列的名稱(chēng)

2、DataType屬性指定該列的數(shù)據(jù)類(lèi)型,默認(rèn)類(lèi)型為String*3、Expression屬性為該列指定一個(gè)表達(dá)式字符串

4、ColumnMapping屬性指定該列和XML元素的映射方式

5、AllowDBNull屬性用來(lái)獲取或設(shè)置在行中該列是否允許空值

6、Caption屬性用來(lái)獲取或設(shè)置列的標(biāo)題,若沒(méi)有設(shè)置,則返回ColumnName的值,它常常用來(lái)顯示DataColumn的描述文字或友好名稱(chēng)

7、Ordinal屬性用來(lái)獲取在集合中的位置(索引)

8、ReadOnly屬性用來(lái)指定該列在行中是否不允許修改

9、Unique屬性用來(lái)指定該列在每一行中的值是否必須是唯一

10、DefaultValue屬性用來(lái)指定在創(chuàng)建新行時(shí)該列的默認(rèn)值

11、MaxLength屬性用來(lái)獲取或設(shè)置文本列的最大長(zhǎng)度(字符個(gè)數(shù))

12、AutoIncrement屬性:指定添加新行時(shí)該列的值是否自動(dòng)遞增

13、AutoIncrementStep屬性:指定添加新行時(shí)該列的值自動(dòng)遞增時(shí),增量的大?。J(rèn))

14、AutoIncrementSeed屬性分別用來(lái)指定添加新行時(shí)該列的值自動(dòng)遞增時(shí),列的起始值。

15、通過(guò)調(diào)用Columns集合的Add、AddRange、Insert、Remove和Clear方法可分別進(jìn)行列的添加、插入、刪除和清除操作。DataColumn類(lèi)的一些屬性:利用AddRange方法構(gòu)造學(xué)生信息管理系統(tǒng)中數(shù)據(jù)表Score的列結(jié)構(gòu)。DataTabledataTable1=newDataTable();dataTable1.TableName="Score";DataColumndataColumn1=newDataColumn();DataColumndataColumn2=newDataColumn();DataColumndataColumn3=newDataColumn();dataColumn1.Caption="學(xué)號(hào)";dataColumn1.ColumnName="studentno";dataColumn1.MaxLength=8;dataColumn2.Caption="課程號(hào)";dataColumn2.ColumnName="courseno";dataColumn2.MaxLength=8;dataColumn3.Caption="成績(jī)";dataColumn3.ColumnName="score";dataColumn3.DataType=typeof(Single);DataColumn[]cols=newDataColumn[3];cols[0]=dataColumn1;cols[1]=dataColumn2;cols[2]=dataColumn3;dataTable1.Columns.AddRange(cols);除了用程序添加數(shù)據(jù)表的列外,還可以在“表集合編輯器”窗口中單擊Columns屬性右側(cè)的[…]按鈕,通過(guò)彈出的“列集合編輯器”對(duì)話(huà)框來(lái)添加列,如圖8.4所示。4.數(shù)據(jù)表的記錄(行)操作DataTable類(lèi)的Rows屬性

——一個(gè)包含數(shù)據(jù)表的行的集合,存儲(chǔ)DataRow類(lèi)對(duì)象。DataRow類(lèi)封裝了數(shù)據(jù)表中行的所有操作。DataRow類(lèi)的RowState屬性反映了記錄行的操作狀態(tài)

DataRowState枚舉值:

Added(已添加)——當(dāng)調(diào)用Rows集合的Add或AddRange方法添加記錄行時(shí)

Deleted(已刪除)——當(dāng)調(diào)用DataRow類(lèi)的Delete方法

Detached(已創(chuàng)建)——當(dāng)調(diào)用DataTable類(lèi)的NewRow方法時(shí)

Modified(已修改)——當(dāng)通過(guò)DataRow類(lèi)的Item屬性來(lái)指定該行的字段值時(shí)

Unchanged(未更改)——當(dāng)調(diào)用AcceptChang

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論