《C#程序設(shè)計》課件第15章ADO.NET數(shù)據(jù)庫操作_第1頁
《C#程序設(shè)計》課件第15章ADO.NET數(shù)據(jù)庫操作_第2頁
《C#程序設(shè)計》課件第15章ADO.NET數(shù)據(jù)庫操作_第3頁
《C#程序設(shè)計》課件第15章ADO.NET數(shù)據(jù)庫操作_第4頁
《C#程序設(shè)計》課件第15章ADO.NET數(shù)據(jù)庫操作_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

ADO.NET數(shù)據(jù)庫操作思政目標(biāo):

?正確使用網(wǎng)絡(luò),維護(hù)網(wǎng)絡(luò)安全

?培養(yǎng)敢于思考、主動驗證的素質(zhì)技能要求:

?了解數(shù)據(jù)庫的基本概念

?了解ADO.NET的基本概念

?了解與ADO.NET相關(guān)的命名空間

?掌握ADO.NET中數(shù)據(jù)訪問的核心對象

?了解參數(shù)化查詢過程、數(shù)據(jù)綁定相關(guān)控件實踐目標(biāo):

?能夠在示例的基礎(chǔ)上,完成數(shù)據(jù)查找功能

?能夠使用核心對象對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)訪問

?能夠?qū)?shù)據(jù)庫有進(jìn)一步認(rèn)識第15章數(shù)據(jù)庫數(shù)據(jù)庫的基本操作ADO.NETADO.NET數(shù)據(jù)庫操作對象數(shù)據(jù)庫01PART數(shù)據(jù)庫(Database)是指按照一定規(guī)則存儲、組織和管理數(shù)據(jù)的集合。用戶可通過數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem,DBMS)對數(shù)據(jù)庫進(jìn)行管理操作。通過數(shù)據(jù)庫管理系統(tǒng),可以創(chuàng)建與定義數(shù)據(jù)庫、管理操作數(shù)據(jù)庫、對數(shù)據(jù)庫進(jìn)行查詢等各類操作。數(shù)據(jù)庫數(shù)據(jù)庫有多個種類,其中關(guān)系數(shù)據(jù)庫使用最為廣泛。在這類數(shù)據(jù)庫中,通過二維表來存儲數(shù)據(jù)。數(shù)據(jù)庫學(xué)生信息表數(shù)據(jù)庫學(xué)號姓名年齡性別籍貫12010101張三20男廣東12010102李四21女云南12010103王五19男山東12010104趙六22男遼寧常用術(shù)語數(shù)據(jù)庫術(shù)語說明表(Table)在數(shù)據(jù)庫中的表是按照行和列來組織數(shù)據(jù)集合的一種結(jié)構(gòu)記錄(Record)在表中的每一行,即稱為一條記錄字段(Field)在表中的每一列,即稱為一個字段主鍵(Primarykey)唯一的標(biāo)識表中的某一條記錄各個字段中,學(xué)號是無法重復(fù)的,其他字段都可能出現(xiàn)重復(fù)。主鍵具有唯一性,因此,將學(xué)號這種唯一性的字段設(shè)為主鍵是合適的。數(shù)據(jù)庫的基本操作02PARTInsertInsert用于添加數(shù)據(jù)記錄SelectSelect語句是數(shù)據(jù)庫操作中最基本和最重要的語句之一,負(fù)責(zé)從數(shù)據(jù)庫中檢索滿足條件的數(shù)據(jù)UpdateUpdate用來更新數(shù)據(jù)庫表中的記錄Delete該語句用于從數(shù)據(jù)表中刪除部分或者全部記錄01020304數(shù)據(jù)庫的基本操作數(shù)據(jù)庫的基本操作示例Insert數(shù)據(jù)庫的基本操作需要注意的是,在指定值的時候,對于char、varchar類型,需要將值放到單引號之間;而對于integer則不必。使用上述語句,字段和字段值是一一對應(yīng)的,與順序無關(guān)示例Select數(shù)據(jù)庫的基本操作(1)select字段1,字段2,...,字段n:在這里,可以把最終希望呈現(xiàn)的字段名寫在select之后,當(dāng)然若希望查詢所有的字段,則寫一個*即可。(2)fromTableName:表明針對哪個表進(jìn)行查詢。(3)where查詢過濾條件:通過此處的查詢過濾條件來過濾掉不希望呈現(xiàn)的結(jié)果,查詢過濾條件可以是一個簡單的條件,也可以是若干個簡單條件通過and、or等連接起來的復(fù)雜邏輯條件。此外,在where中還支持使用like,可以使用它來實現(xiàn)模糊匹配。(4)orderby字段名ASC/DESC:可以通過此處的設(shè)置,將查詢結(jié)果按照指定的字段來升序或者降序排序,ASC表明升序排序,而DESC表明降序排序,二者取其一。select*from…表明查詢出所有字段。Select語句的功能有很多,如查詢數(shù)據(jù)、查詢指定字段、排序、過濾、查詢前n條記錄、模糊查詢、統(tǒng)計、分組、空值查詢等。示例Update數(shù)據(jù)庫的基本操作示例DeleteADO.NET03PARTADO.NET是對MicrosoftActiveXDataObjects(ADO)的一個重大改進(jìn),它提供了平臺互用性和可伸縮的數(shù)據(jù)訪問方式。利用ADO.NET,可以較為輕松地實現(xiàn)對各種數(shù)據(jù)庫的訪問,并且訪問方式幾乎完全一樣。在ADO.NET中采用XML格式表達(dá)數(shù)據(jù)。ADO.NET與傳統(tǒng)ADO最大的不同在于,ADO.NET除了提供與早期相同的聯(lián)機(jī)模式之外,還提供了一種離線訪問模式。所謂的聯(lián)機(jī)模式,是指應(yīng)用程序與數(shù)據(jù)庫將會一直保持連接,直至應(yīng)用程序?qū)?shù)據(jù)庫的操作完畢才會斷開;而離線模式則是指在取得數(shù)據(jù)庫的數(shù)據(jù)后,即斷開與數(shù)據(jù)庫的連接,取過來的數(shù)據(jù)被存到一個內(nèi)存數(shù)據(jù)庫中(即后文所要介紹的DataSet),后續(xù)的操作就在該內(nèi)存數(shù)據(jù)庫中進(jìn)行,當(dāng)所有的操作執(zhí)行完畢之后,再次連接數(shù)據(jù)庫并將改動更新到數(shù)據(jù)庫中。當(dāng)一個操作比較費(fèi)時的時候,適宜采用離線模式,可以避免長期占用數(shù)據(jù)庫連接,以節(jié)省資源。ADO.NET常用命名空間說明ADO.NET命名空間說明System.Data提供了ADO.NET的基本類System.Data.SqlClient提供了為SQLServer7.0及更新版本數(shù)據(jù)庫設(shè)計的數(shù)據(jù)存取類System.Data.ODBC提供了用于訪問ODBC數(shù)據(jù)源的數(shù)據(jù)存取類System.Data.OracleClient提供了用于訪問Oracle數(shù)據(jù)源的數(shù)據(jù)存取類System.Data.OleDb提供了OLEDB數(shù)據(jù)源或SQLServer6.5及更老版本數(shù)據(jù)庫設(shè)計的數(shù)據(jù)存取類常用對象ADO.NET對象說明Connection建立與特定數(shù)據(jù)源的連接Command對數(shù)據(jù)源執(zhí)行數(shù)據(jù)庫命令,用于返回數(shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲過程以及發(fā)送或檢索參數(shù)信息等DataReader從數(shù)據(jù)源中讀取只進(jìn)且只讀的數(shù)據(jù)流DataAdapter執(zhí)行SQL命令并用數(shù)據(jù)源填充DataSetDataSet此即通常所說的離線數(shù)據(jù)庫需要注意的是,在ADO.NET中,是使用Connection對象連接到特定的數(shù)據(jù)源的,究竟使用哪種Connection對象,這取決于數(shù)據(jù)源的類型。(1)OLEDB.NETFramework數(shù)據(jù)提供程序包括一個OleDbConnection對象。(2)ODBC.NETFramework數(shù)據(jù)提供程序包括一個OdbcConnection對象。(3)SQLServer.NETFramework數(shù)據(jù)提供程序包括一個SqlConnection對象。(4)Oracle.NETFramework數(shù)據(jù)提供程序包括一個OracleConnection對象ADO.NET數(shù)據(jù)庫操作對象04PARTConnection即數(shù)據(jù)連接對象,負(fù)責(zé)對數(shù)據(jù)源的連接。ADO.NET數(shù)據(jù)庫操作對象Connection對象有以下三種常用方法。(1)Open():打開數(shù)據(jù)庫。(2)Close():關(guān)閉數(shù)據(jù)庫。(3)CreateCommand():創(chuàng)建并返回一個與當(dāng)前連接相關(guān)聯(lián)的Command對象。ConnectionConnection對象的主要屬性屬性說明ConnectionString表示用于打開SQLServer數(shù)據(jù)庫的字符串State表示Connection的狀態(tài),有Closed和Open兩種狀態(tài)ConnectionTimeout連接的超時時間Database獲取當(dāng)前使用的數(shù)據(jù)庫的名稱DataSource獲取當(dāng)前的SQLServer實例的名稱示例關(guān)于Connection對象,其ConnectionString(連接字符串)有以下兩種典型的寫法ADO.NET數(shù)據(jù)庫操作對象其中,IntegratedSecurity為false時,則需要在連接中指定用戶ID和密碼。若為true時,將使用當(dāng)前的Windows賬戶憑據(jù)進(jìn)行身份驗證。另外,IntegratedSecurity=true等效于IntegratedSecurity=SSPI。有了數(shù)據(jù)庫連接字符串,就可以用來創(chuàng)建數(shù)據(jù)庫連接對象ADO.NET數(shù)據(jù)庫操作對象此外,Connection對象還有一個StateChange事件,該事件在連接狀態(tài)更改時觸發(fā)。該事件的處理程序接收一個StateChangeEventArgs類型參數(shù),該參數(shù)有兩個重要屬性,即CurrentState和OriginalState,一個代表當(dāng)前狀態(tài),另外一個則代表原始狀態(tài),這兩個屬性都是ConnectionState枚舉值。Command對象即數(shù)據(jù)庫命令對象,主要執(zhí)行包括添加、刪除、修改及查詢數(shù)據(jù)的操作的命令。ADO.NET數(shù)據(jù)庫操作對象CommandCommand的常用屬性屬性說明Connection用于設(shè)置該Command對象所依賴的連接對象CommandTimeOut用于設(shè)置或者返回終止執(zhí)行命令之前需要等待的時間(s),默認(rèn)為30sParameters用于向命令傳遞參數(shù)CommandTypeCommandTextCommandType.Text(默認(rèn)):此時CommandText為一個SQL語句CommandType.StoredProcedure:此時CommandText為存儲過程CommandType.TableDirect:此時CommandText為表名ADO.NET數(shù)據(jù)庫操作對象Command常用方法方法說明ExecuteNonQuery()執(zhí)行一個SQL語句,返回受影響的行數(shù),這個方法主要用于對數(shù)據(jù)庫執(zhí)行增加、更新、刪除操作;查詢的時候并非調(diào)用此方法ExecuteReader()執(zhí)行一個查詢的SQL語句,返回一個SqlDataReader對象ExecuteScalar()從數(shù)據(jù)庫檢索單個值,這個方法主要用于統(tǒng)計操作其構(gòu)造函數(shù)主要有以下三種ADO.NET數(shù)據(jù)庫操作對象示例

構(gòu)造函數(shù)演示DataReader對象是只讀的,且只能單向向前讀取,每次讀取一行,故綁定數(shù)據(jù)時比使用數(shù)據(jù)集(DataSet)方式性能要高。DataReader對象不能直接實例化,必須借助于相關(guān)的Command對象來創(chuàng)建實例,如用SqlCommand的實例的ExecuteReader()方法可以創(chuàng)建SqlDataReader實例。DataReaderDataReader的以下三個常用屬性。(1)FieldCount:表明字段的數(shù)目。(2)IsClosed:表明返回DataReader對象是否已經(jīng)關(guān)閉。(3)HasRows:表明是否包含一條或多條數(shù)據(jù)。ADO.NET數(shù)據(jù)庫操作對象ADO.NET數(shù)據(jù)庫操作對象DataReader常用方法方法說明GetDataTypeName(i)返回第i列(從0算起)的數(shù)據(jù)類型(返回值類型為string)GetFieldType(i)返回指定列的數(shù)據(jù)類型(返回值類型為Type)GetName(i)返回指定列的字段名稱GetOrdinal(name)返回指定字段的字段索引(即指定的字段是第幾個字段)GetValue(i)返回指定列的數(shù)據(jù)GetValues(object[]arr)返回指定行的所有字段內(nèi)容,并存儲在arr數(shù)組中IsDBNull(i)判斷當(dāng)前行的第i列是否為NullRead()該方法是最重要的方法,用于將記錄指針往后移一行,返回false則表明后面沒有數(shù)據(jù)了ADO.NET數(shù)據(jù)庫操作對象DataReader讀取數(shù)據(jù)的方法屬性說明GetXXX(inti)讀取第i列的值并轉(zhuǎn)換為指定的類型,類型不匹配時會引發(fā)異常reader[inti]讀取第i列的值;返回值是一個Object類型,故不會出錯reader["列名"]讀取列名所指定列的值示例

reader["列名"]用于讀取列名所指定列的值,返回值是一個Object類型,不會出錯,并且使用reader來讀取的時候,只能在循環(huán)中進(jìn)行只前進(jìn)的讀取,不能后退讀取ADO.NET數(shù)據(jù)庫操作對象reader.Read()返回一個bool值,該值表明是否還有數(shù)據(jù)供讀取,當(dāng)返回true時,表示仍有數(shù)據(jù),所以循環(huán)繼續(xù)。在循環(huán)中,可以通過以上三種方式來讀取。示例

使用DataReader讀取數(shù)據(jù)ADO.NET數(shù)據(jù)庫操作對象上面的程序中字段較少,可以采取reader[1]這樣的寫法,若使用select*from這樣的查詢語句,字段個數(shù)往往很多,此時不適合此種寫法,可以借助reader.FieldCount屬性來對當(dāng)前行所有字段實現(xiàn)遍歷。示例

在關(guān)閉DataReader對象的同時自動關(guān)閉掉與之相關(guān)的Connection對象的方法ADO.NET數(shù)據(jù)庫操作對象DataAdapter,即數(shù)據(jù)適配器。它可以將使用Command規(guī)定的操作從數(shù)據(jù)源中檢索出數(shù)據(jù),送往數(shù)據(jù)集對象(DataSet),或者將數(shù)據(jù)集中經(jīng)過編輯后的數(shù)據(jù)送回數(shù)據(jù)源ADO.NET數(shù)據(jù)庫操作對象DataAdapterDataAdapter常用屬性屬性說明InsertCommand獲取或者設(shè)置一個SQL語句或者存儲過程,以實現(xiàn)向數(shù)據(jù)源新增數(shù)據(jù)記錄DeleteCommand獲取或者設(shè)置一個SQL語句或者存儲過程,以實現(xiàn)從數(shù)據(jù)源刪除數(shù)據(jù)記錄UpdateCommand獲取或者設(shè)置一個SQL語句或者存儲過程,以實現(xiàn)向數(shù)據(jù)源修改數(shù)據(jù)記錄SelectCommand獲取或者設(shè)置一個SQL語句或者存儲過程,以實現(xiàn)從數(shù)據(jù)源獲取符合條件的數(shù)據(jù)記錄示例

DataAdapter的屬性使用。前面在“ExecuteNonQuery()演示”中演示了如何新增數(shù)據(jù),下面使用DataAdapter的屬性來完成這一功能。ADO.NET數(shù)據(jù)庫操作對象DataAdapter的重要方法有兩個,即Update()和Fill()。調(diào)用Update()方法時,DataAdapter將檢查參數(shù)DataSet每一行的RowState屬性,根據(jù)RowState屬性來檢查DataSet里的每行是否改變和改變的類型,并依次執(zhí)行所需的Insert、Update或Delete語句,將改變提交到數(shù)據(jù)庫中。該方法返回影響DataSet的行數(shù)。示例

Fill()方法有以下三種常用重載形式ADO.NET數(shù)據(jù)庫操作對象無論是填充到DataSet,還是填充到DataTable,數(shù)據(jù)都是被存儲到一個DataTable中。填充到DataSet,其實是填充到其中的Tables[0]中。對DataTable中的數(shù)據(jù)讀取,只需要逐行遍歷即可示例

數(shù)據(jù)填充的三種常見方式ADO.NET數(shù)據(jù)庫操作對象DataSet中可以容納多個表,這些表的獲取支持以下兩種方式。索引方式:dataset.Tables[i]名稱方式:dataset.Tables["TableName"]當(dāng)需要獲取所有表時,可以通過Tables.Count屬性來遍歷。獲取DataSet中的表01當(dāng)需要獲取所有行時,可以通過Rows.Count屬性遍歷讀取table中的行02當(dāng)需要獲取所有列時,可以通過Columns.Count屬性遍歷。當(dāng)要獲取整個表格數(shù)據(jù)時,使用行與列的雙重循環(huán)即可。讀取table中的列03列的創(chuàng)建04ADO.NET數(shù)據(jù)庫操作對象DataSet

DataSet,即數(shù)據(jù)集對象,用于表示存儲在內(nèi)存中的數(shù)據(jù),相當(dāng)于一個內(nèi)存中的數(shù)據(jù)庫,可以包括多個DataTable對象及DataView對象。DataSet主要用于管理存儲在內(nèi)存中的數(shù)據(jù)以及對數(shù)據(jù)的離線操作。DataSet相當(dāng)于一個數(shù)據(jù)庫,因此數(shù)據(jù)庫中有數(shù)據(jù)表(即DataTable),也有行(DataRow)與列(DataColumn)行的創(chuàng)建05參數(shù)化查詢ADO.NET數(shù)據(jù)庫操作對象示例完成指定年齡的學(xué)生信息查詢除了上面的使用方法,還可以結(jié)合Command對象的Parameters屬性來實現(xiàn)參數(shù)化的使用方式。其使用方式分以下步驟。(1)編寫SQL語句,指定參數(shù)名稱,一般都習(xí)慣使用“@字段名”的命名方式。(2)調(diào)用Command的Parameters.Add()方法加入?yún)?shù)。(3)設(shè)置Parameters集合中各個參數(shù)的值。應(yīng)該在執(zhí)行Command之前給參數(shù)賦值。參數(shù)化查詢ADO.NET數(shù)據(jù)庫操作對象Parameters.Add()方法有如下兩種常用的重載形式參數(shù)化查詢ADO.NET數(shù)據(jù)庫操作對象示例1:針對學(xué)號的參數(shù)化形式上述寫成StuNo=@ABC也沒關(guān)系,只需要下面相應(yīng)的地方都調(diào)整為@ABC,但不推薦這么寫,推薦采用“@字段名”的方式。參數(shù)化查詢ADO.NET數(shù)據(jù)庫操作對象示例2:DataAdapter的SelectCommand屬性及參數(shù)化查詢04030201Web窗體的數(shù)據(jù)綁定技術(shù)便于在控件中顯示數(shù)據(jù),不過它的數(shù)據(jù)綁定不是雙向的,數(shù)據(jù)綁定從數(shù)據(jù)源讀取數(shù)據(jù)但不對其進(jìn)行更新。更新數(shù)據(jù)比顯示數(shù)據(jù)更復(fù)雜,因為大多數(shù)Web窗體不需要將數(shù)據(jù)寫回原數(shù)據(jù)庫,所以Web窗體數(shù)據(jù)綁定不包括更新代碼。數(shù)據(jù)綁定的概念從工具箱的Windows窗體欄中,將一個DataGridView

控件拖到窗體上,選擇該控件,修改屬性窗體中DataSource

屬性為所選的數(shù)據(jù)庫,即完成了顯示控件和數(shù)據(jù)庫的綁定,填充數(shù)據(jù)集后,DataGridView

控件才會顯示數(shù)據(jù),此時可以另加一個控件以激活顯示綁定過程Windows窗體數(shù)據(jù)同樣需要綁定,如果用戶使用DataGridView控件,則需要使DataGridView控件和數(shù)據(jù)庫控件進(jìn)行綁定。使用情況(1)OleDbDataAdapter1.Fill(dsCategories1):選用的數(shù)據(jù)引擎是OLE

DB。(2)Sql

DbDataAdapter1.Fill(dsCategoriesl):選用的數(shù)據(jù)庫為Microsoft

SQL數(shù)據(jù)庫。其中,dsCategories1表示DataSet創(chuàng)建的對象名。命令A(yù)DO.NET數(shù)據(jù)庫操作對象數(shù)據(jù)綁定另外,可以在源程序代碼中調(diào)用DataGrid

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論