ADO數(shù)據(jù)庫操作_第1頁
ADO數(shù)據(jù)庫操作_第2頁
ADO數(shù)據(jù)庫操作_第3頁
ADO數(shù)據(jù)庫操作_第4頁
ADO數(shù)據(jù)庫操作_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第八章第八章使用使用ADO.NET操作數(shù)據(jù)庫操作數(shù)據(jù)庫本章主要介紹以下內(nèi)容:本章主要介紹以下內(nèi)容:l l ADO.NET簡介簡介l l .NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序l l 使用使用ADO.NET對象對象l l 作業(yè)作業(yè)8.1ADO.NET簡介簡介ADO.NET是是.NETFramework下的一種新的下的一種新的數(shù)據(jù)訪數(shù)據(jù)訪問編程模型問編程模型,同時(shí)提供對,同時(shí)提供對XML的強(qiáng)大支持。本章介紹基的強(qiáng)大支持。本章介紹基于于ADO.NET的數(shù)據(jù)源連接和數(shù)據(jù)讀寫知識(shí)的數(shù)據(jù)源連接和數(shù)據(jù)讀寫知識(shí)數(shù)據(jù)集數(shù)據(jù)集SQL Server .NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序OLE DB .NET 數(shù)據(jù)提供程序數(shù)

2、據(jù)提供程序SQL Server 7.0(或更高版本)(或更高版本)OLEDB 數(shù)據(jù)源數(shù)據(jù)源(SQL Server 6.5)8.1ADO.NET簡介簡介ADO.NET對象模型由兩個(gè)主要部分組成對象模型由兩個(gè)主要部分組成 DataSet類類 允許在無連接的高速緩存中存儲(chǔ)和管理數(shù)據(jù)允許在無連接的高速緩存中存儲(chǔ)和管理數(shù)據(jù) 獨(dú)立于任何數(shù)據(jù)源獨(dú)立于任何數(shù)據(jù)源 .Net數(shù)據(jù)提供程序類數(shù)據(jù)提供程序類 與物理數(shù)據(jù)源進(jìn)行連接與物理數(shù)據(jù)源進(jìn)行連接8.1ADO.NET簡介簡介nADO.NET 提供了兩種數(shù)據(jù)提供程序提供了兩種數(shù)據(jù)提供程序lSQL Server .NET 提供程序需要導(dǎo)入 System.Data.Sql

3、Client 命名空間,使用這個(gè)數(shù)據(jù)提供程序比使用 OLEDB 數(shù)據(jù)提供程序效率更高,這是因?yàn)闆]有經(jīng)過 OLEDB 層或ODBC 層lOLE DB .NET 提供程序必須導(dǎo)入 System.Data.OleDb 命名空間n數(shù)據(jù)提供程序?qū)?yīng)的類數(shù)據(jù)提供程序?qū)?yīng)的類lXxxConnection、XxxCommand、XxxDataReader8.1ADO.NET簡介簡介SQL Server 7.0(或更高版本)(或更高版本)n在連接環(huán)境中,只有操作結(jié)在連接環(huán)境中,只有操作結(jié)束后才斷開與數(shù)據(jù)庫的連接束后才斷開與數(shù)據(jù)庫的連接SqlConnectionSqlCommandSqlDataReader8.1

4、ADO.NET簡介簡介在連接環(huán)境中使用在連接環(huán)境中使用ADO.NETn在與數(shù)據(jù)庫斷開連接的情在與數(shù)據(jù)庫斷開連接的情況下,數(shù)據(jù)庫資源并不被況下,數(shù)據(jù)庫資源并不被獨(dú)占獨(dú)占SqlConnection數(shù)據(jù)適配器數(shù)據(jù)適配器數(shù)據(jù)集數(shù)據(jù)集SQL Server 7.0(或更高版本)(或更高版本)在非連接環(huán)境中使用在非連接環(huán)境中使用ADO.NET8.1ADO.NET簡介簡介8.1ADO.NET簡介簡介n.NET 數(shù)據(jù)提供程序的定義數(shù)據(jù)提供程序的定義l數(shù)據(jù)提供程序是一個(gè)類的集合,是數(shù)據(jù)提供程序是一個(gè)類的集合,是 ADO.NET 的核心的核心組件組件l數(shù)據(jù)提供程序用于連接到數(shù)據(jù)庫、檢索和更新數(shù)據(jù)數(shù)據(jù)提供程序用于連接

5、到數(shù)據(jù)庫、檢索和更新數(shù)據(jù)l數(shù)據(jù)提供程序使數(shù)據(jù)源和應(yīng)用程序之間能夠進(jìn)行通數(shù)據(jù)提供程序使數(shù)據(jù)源和應(yīng)用程序之間能夠進(jìn)行通信信8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序n .NET 數(shù)據(jù)提供程序的類型數(shù)據(jù)提供程序的類型lSQL Server .NET 數(shù)據(jù)提供程序(內(nèi)置)數(shù)據(jù)提供程序(內(nèi)置)lOLE DB .NET 數(shù)據(jù)提供程序(內(nèi)置)數(shù)據(jù)提供程序(內(nèi)置)lODBC .NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序l其他數(shù)據(jù)提供程序(如其他數(shù)據(jù)提供程序(如 Oracle 數(shù)據(jù)提供程序)數(shù)據(jù)提供程序)8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序數(shù)據(jù)提供程序數(shù)據(jù)提供程序描述描述SQLServer.NET提供了對提供了對 SQL

6、Server 2000 和和 SQL Server 7.0 數(shù)據(jù)庫的數(shù)據(jù)庫的優(yōu)化訪問優(yōu)化訪問OLEDB.NET提供了對其他的數(shù)據(jù)源,如提供了對其他的數(shù)據(jù)源,如 Oracle, Sybase, DB2/400, Microsoft Access 數(shù)據(jù)庫的訪問,也包括數(shù)據(jù)庫的訪問,也包括 SQL Server 6.5 或以前版本或以前版本 8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序數(shù)據(jù)提供程序數(shù)據(jù)提供程序命名空間命名空間SQLServer.NETSystem.Data.SqlClientOLEDB.NETSystem.Data.OleDb8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序n .NET 數(shù)據(jù)提供程序

7、包含的四個(gè)核心類數(shù)據(jù)提供程序包含的四個(gè)核心類XxxConnection(如 SqlConnection) 到一個(gè)數(shù)據(jù)源的連接XxxCommand(如 SqlCommand) 在數(shù)據(jù)源上執(zhí)行的 SQL 語句或者存儲(chǔ)過程XxxDataReader(如 SqlDataReader) 從數(shù)據(jù)源中獲取只向前的、只讀的數(shù)據(jù)流XxxDataAdapter(如 SqlDataAdapter) 使用 XxxCommand 對象操作數(shù)據(jù)集,更新數(shù)據(jù)源8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序nSQL Server .NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序(優(yōu)先選擇優(yōu)先選擇)l使用特有的表格數(shù)據(jù)流(TDS)協(xié)議與 SQL S

8、erver 通信l沒有調(diào)用任何中間組件和服務(wù),直接和 SQL Server 進(jìn)行通訊,效率高lSQL Server 的版本需要在7.0以上l在連接字符串中不需要包含Provider關(guān)鍵字,默認(rèn)數(shù)據(jù)源就是 SQL Server 7.0 及以后版本8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序nOLE DB .NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序l使用本機(jī) OLE DB和COM的互操作性訪問數(shù)據(jù)源l支持 SQL Server 6.5 及以前版本的數(shù)據(jù)源l在連接字符串中需要給出數(shù)據(jù)提供程序的類型,如:數(shù)據(jù)源數(shù)據(jù)源數(shù)據(jù)提供程序數(shù)據(jù)提供程序SQL Server 6.5Provider=SQL OLEDBOracle

9、 ServerProvider=MSDAORAMicrosoft Access databaseProvider=Microsoft.Jet.OLEDB.4.08.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序nODBC .NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序l使用本機(jī) ODBC 應(yīng)用程序接口訪問數(shù)據(jù)源l在.NET Framework 1.0 中不包含,需要手工引用l在連接字符串中需要給出數(shù)據(jù)提供程序的類型,如數(shù)據(jù)源數(shù)據(jù)源 數(shù)據(jù)提供程序數(shù)據(jù)提供程序 / 驅(qū)動(dòng)程序驅(qū)動(dòng)程序Oracle ServerDriver=Microsoft ODBC for OracleMicrosoft AccessDriver=Mic

10、rosoft Access Driver(*.mdb)8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序nOracle 數(shù)據(jù)提供程序數(shù)據(jù)提供程序l使用 Oracle 客戶端.NET數(shù)據(jù)提供程序訪問數(shù)據(jù)源l在.NET Framework 1.0 版本中不包含,需要手工引用l在使用該數(shù)據(jù)提供應(yīng)用程序時(shí),需要同時(shí)引用 System.Data.dll 和 System.Data.OracleClient.dll8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序數(shù)據(jù)源數(shù)據(jù)源選擇的數(shù)據(jù)提供程序選擇的數(shù)據(jù)提供程序SQL Server 7.0或或SQL Server 2000SQL Server .NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序SQ

11、L Server 6.5或更早版本或更早版本OLE DB .NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序可以通過可以通過OLE DB提供程序訪問提供程序訪問的任何異構(gòu)數(shù)據(jù)源的任何異構(gòu)數(shù)據(jù)源OLE DB .NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序可以通過可以通過ODBC驅(qū)動(dòng)程序訪問的驅(qū)動(dòng)程序訪問的任何異構(gòu)數(shù)據(jù)源任何異構(gòu)數(shù)據(jù)源ODBC .NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序n連接字符串連接字符串(ConnectionString)定義了同數(shù)據(jù)庫建定義了同數(shù)據(jù)庫建立連接需要的參數(shù)立連接需要的參數(shù)Provider建立連接的數(shù)據(jù)供應(yīng)商。建立連接的數(shù)據(jù)供應(yīng)商。 只有只有OleDbConnectio

12、n 需要設(shè)置需要設(shè)置該值該值ConnectTimeout建立連接的超時(shí)值,默認(rèn)是建立連接的超時(shí)值,默認(rèn)是15秒秒InitialCatalog數(shù)據(jù)庫名稱數(shù)據(jù)庫名稱DataSourceSQLServer 服務(wù)器名稱,或服務(wù)器名稱,或 Access 數(shù)據(jù)庫的文件名數(shù)據(jù)庫的文件名PasswordSQLServer 登陸賬號密碼登陸賬號密碼UserIDSQLServer 登陸賬號名稱登陸賬號名稱IntegratedSecurity或或Trusted_Connection是否使用是否使用 Windows集成驗(yàn)證,值為集成驗(yàn)證,值為 True,False, 和和 SSPI(SSPI=True.)8.2.NE

13、T數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 2000服務(wù)器名稱Srv2003數(shù)據(jù)庫名稱Northwind安全性Windows 驗(yàn)證用戶名密碼超時(shí)1 分鐘Dim cn As new sqlConnectioncn.ConnectionString =Data Source = Srv2003;” _“Initial Catalog = Northwind;” _ “Integrated Security = True;” _“Connection TimeOut = 60;8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 2000服務(wù)

14、器名稱ProdServ01數(shù)據(jù)庫名稱Pubs安全性混合模式用戶名John密碼Pssw0rdDim cn As new sqlConnectioncn.ConnectionString =Data Source = ProdServ01;” _ “Initial Catalog = Pubs;” _ “User ID = John; & _ “Password = Pssw0rd“8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 6.5服務(wù)器名稱ProdServ01數(shù)據(jù)庫名稱Pubs安全性Windows 驗(yàn)證Dim cn As new sqlConnec

15、tion cn.ConnectionString =Provider = SQLOLEDB;” _ “Data Source = ProdServ01;” _ “Initial Catalog = Pubs;” _ “Integrated Security = true“8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft Access 2000數(shù)據(jù)庫位置C:samplesNorthwind.mdbDim cn As new sqlConnectioncn.ConnectionString =Provider = SQLOLEDB;” + _“Data Source = C:sampl

16、esNorthwind.mdb”n注意事項(xiàng)注意事項(xiàng):l只有當(dāng)連接關(guān)閉時(shí),才可以設(shè)置連接字符串只有當(dāng)連接關(guān)閉時(shí),才可以設(shè)置連接字符串l要想重新設(shè)置連接字符串,必須先關(guān)閉連接,設(shè)置連要想重新設(shè)置連接字符串,必須先關(guān)閉連接,設(shè)置連接字符串,然后再重新打開連接接字符串,然后再重新打開連接8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序確定下面每個(gè)例子后的確定下面每個(gè)例子后的.NET數(shù)據(jù)提供程序和連接字符串?dāng)?shù)據(jù)提供程序和連接字符串是否有效,若無效,更改它們。是否有效,若無效,更改它們。產(chǎn)品Microsoft SQL Server 2000服務(wù)器名稱ProdServ01數(shù)據(jù)庫名稱Pubs安全性Windows 驗(yàn)證D

17、ata Source = ProdServ01;Initial Catalog = Pubs;User ID = JohnK; Password = JohnK;Data Source = ProdServ01;Initial Catalog = Pubs;Integrated Security = True18.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 2000服務(wù)器名稱ProdServ01數(shù)據(jù)庫名稱Pubs用戶名JohnK密碼JohnK安全性混合模式Data Source = Pubs;Initial Catalog = ProdServ01;User

18、 ID = JohnK; Password = JohnK;Data Source = ProdServ01;Initial Catalog = Pubs;User ID = JohnK; Password = JohnK;28.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 6.5服務(wù)器名稱ProdServ01數(shù)據(jù)庫名稱Pubs安全性Windows 驗(yàn)證Data Source = ProdServ01;Initial Catalog = Pubs;Integrated Security = TrueProvider = SQLOLEDB;Data Source

19、 = ProdServ01;Initial Catalog = Pubs;Integrated Security = True38.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 7.0服務(wù)器名稱ProdServ02數(shù)據(jù)庫名稱Northwind安全性Windows 驗(yàn)證Data Source = ProdServ02;Initial Catalog = Northwind;Integrated Security = SSPI48.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 7.0服務(wù)器名稱ProdServ02數(shù)據(jù)庫名稱Pubs

20、安全性Windows 驗(yàn)證Data Source = ProdServ02;Initial Catalog = Pubs;User ID AmyJ; Password = AmyJ;5Data Source = ProdServ02;Initial Catalog = Pubs;Intergrated Security SSPI8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 2000服務(wù)器名稱ProdServ01數(shù)據(jù)庫名稱Pubs超時(shí)1分鐘安全性Windows 驗(yàn)證Data Source = ProdServ01;Initial Catalog = Pubs

21、;Integrated Security = SSPI;Connection Timeout = 1;6Data Source = ProdServ01;Initial Catalog = Pubs;Integrated Security = SSPI;Connection Timeout = 60;8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 2000服務(wù)器名稱ProdServ01數(shù)據(jù)庫名稱Pubs超時(shí)15秒安全性Windows 驗(yàn)證Data Source = ProdServ01;Initial Catalog = Pubs;Integrated Se

22、curity = SSPI;7Data Source = ProdServ01;Initial Catalog = Pubs;Integrated Security = SSPI;Connection Timeout = 15;8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序產(chǎn)品Microsoft SQL Server 2000服務(wù)器名稱ProdServ02數(shù)據(jù)庫名稱Pubs用戶名JohnK密碼JohnK(如果讀取連接字符串,密碼是可見的)安全性混合模式Data Source = ProdServ02;Initial Catalog = Pubs;User ID JohnK;Password JohnK

23、;88.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序以圖形化方式設(shè)置連接字符串以圖形化方式設(shè)置連接字符串n工具箱中工具箱中*Connection控件建立連接控件建立連接n服務(wù)器資源管理器建立連接服務(wù)器資源管理器建立連接8.2.NET數(shù)據(jù)提供程序數(shù)據(jù)提供程序案例講解案例講解【案例案例8-1】使用使用Connection對象舉例對象舉例 連接應(yīng)用的對象模型連接應(yīng)用的對象模型l連接環(huán)境的典型場景l(fā)證券公司股票交易軟件需要實(shí)時(shí)顯示股票報(bào)價(jià)l銀行軟件需要實(shí)時(shí)查詢貨幣匯率l工廠監(jiān)控軟件需要實(shí)時(shí)監(jiān)控產(chǎn)品的產(chǎn)量和庫存數(shù)量8.3使用使用ADO.NET對象對象數(shù)據(jù)源數(shù)據(jù)源XxxConnectionXxxParameterX

24、xxDataReaderXxxCommandXxxParameterXxxParameterXmlReader在一個(gè)連接應(yīng)用中用到的類在一個(gè)連接應(yīng)用中用到的類8.3使用使用ADO.NET對象對象nXxxConnectionl建立與數(shù)據(jù)源的連接nXxxCommandl對數(shù)據(jù)源執(zhí)行命令。例,SqlCommand類能夠在SQL Server數(shù)據(jù)源中執(zhí)行存儲(chǔ)過程或SQL語句8.3使用使用ADO.NET對象對象nXxxDataReaderl以只讀的、前向的方式,以流的形式讀取數(shù)據(jù),例如 SqlDataReader 可以讀取 Microsoft SQL Server 中的數(shù)據(jù)lXxxDataReader

25、由 XxxCommand(通常是SELECT命令)的 ExecuteReader 方法返回l通過XxxCommand類的ExecuteReader方法返回的結(jié)果集與Select Sql語句的結(jié)果一樣nXxxXmlReaderl提供以快速的、無緩存的、前向的方式讀取XML數(shù)據(jù)8.3使用使用ADO.NET對象對象n一個(gè) Command 對象表示要在數(shù)據(jù)庫服務(wù)器上執(zhí)行的 SQL 語句或存儲(chǔ)過程n不同的數(shù)據(jù)供應(yīng)商實(shí)現(xiàn)了不同的 Command 類System.Data.SqlClient.SqlCommandSQL Server .NET Data Provider 提供提供System.Data.Ol

26、eDb.OleDbCommandOLE DB .NET Data Provider 提供提供8.3使用使用ADO.NET對象對象Command 對象屬性對象屬性NameCommand 對象名稱對象名稱ConnectionCommand 使用哪個(gè)連接同數(shù)據(jù)源通信使用哪個(gè)連接同數(shù)據(jù)源通信CommandType要執(zhí)行的命令類型,可以是文本要執(zhí)行的命令類型,可以是文本(Text)、存儲(chǔ)過程存儲(chǔ)過程(StoredProcedure)、表表(TableDirect)CommandTextSQL 語句或存儲(chǔ)過程的名字語句或存儲(chǔ)過程的名字ParametersCommand 對象可以包含對象可以包含0個(gè)或多個(gè)參

27、數(shù)個(gè)或多個(gè)參數(shù)8.3使用使用ADO.NET對象對象ExeuteSclar執(zhí)行僅返回單一值的命令執(zhí)行僅返回單一值的命令ExecuteReader執(zhí)行返回多行的命令執(zhí)行返回多行的命令ExecuteNoQuery執(zhí)行更新數(shù)據(jù)庫執(zhí)行更新數(shù)據(jù)庫 或更改數(shù)據(jù)庫結(jié)構(gòu)的命令,不返回查詢結(jié)果或更改數(shù)據(jù)庫結(jié)構(gòu)的命令,不返回查詢結(jié)果,但返回受影響的行數(shù),但返回受影響的行數(shù)ExecuteXmlReader (只只有有SqlCommand 支持)支持)執(zhí)行結(jié)果以執(zhí)行結(jié)果以 XML 格式返回。只有格式返回。只有 SQL Server 7.0 或以上產(chǎn)品提或以上產(chǎn)品提供對供對 XML 的支持的支持Command 對象方法對

28、象方法8.3使用使用ADO.NET對象對象n編程實(shí)現(xiàn)編程實(shí)現(xiàn)1.使用使用New關(guān)鍵字創(chuàng)建一個(gè)新實(shí)例并設(shè)置其屬性關(guān)鍵字創(chuàng)建一個(gè)新實(shí)例并設(shè)置其屬性2.使用指定了查詢字符串與連接的構(gòu)造函數(shù)使用指定了查詢字符串與連接的構(gòu)造函數(shù)3.調(diào)用調(diào)用Connection對象的對象的CreateCommand方法方法Dim cmd As new OleDbCommand()cmd.CommandText = strSQLcmd.Connection = cn cmd = new OleDbCommand(strSQL, cn)cmd = cn.CreateCommand();cmd.CommandText = st

29、rSQL;8.3使用使用ADO.NET對象對象方法一:使用工具箱方法一:使用工具箱l使用 SqlConnection 或 OleDbConnectionl使用 SqlCommand 或 OleDbCommandl設(shè)置 Command 對象屬性方法二:使用方法二:使用 Server Explorerl在“視圖”菜單上,點(diǎn)擊“服務(wù)器資源瀏覽器”,或按 Ctrl + Alt + Sl將存儲(chǔ)過程拖拽到窗體中8.3使用使用ADO.NET對象對象nDataReader 類類l負(fù)責(zé)以只讀和只進(jìn)的方式,讀取負(fù)責(zé)以只讀和只進(jìn)的方式,讀取結(jié)果集結(jié)果集中的每行記錄中的每行記錄l效率高,因?yàn)閮?nèi)存中僅保存一條記錄效率高

30、,因?yàn)閮?nèi)存中僅保存一條記錄n創(chuàng)建創(chuàng)建 DataReader 對象對象lDatareader = Command.ExecuteReader() l通過通過 DataReader 讀取每行記錄讀取每行記錄l關(guān)閉關(guān)閉 DataReader,釋放連接,否則連接始終被占用釋放連接,否則連接始終被占用8.3使用使用ADO.NET對象對象n使用使用 DataReader 對象對象l依次讀取結(jié)果集中的每行記錄依次讀取結(jié)果集中的每行記錄l讀取當(dāng)前行的某一列或所有列讀取當(dāng)前行的某一列或所有列l(wèi)檢查某一列是否為空檢查某一列是否為空l獲取列的元數(shù)據(jù),例如列名、序號、數(shù)據(jù)類型等獲取列的元數(shù)據(jù),例如列名、序號、數(shù)據(jù)類型

31、等8.3使用使用ADO.NET對象對象Read()移動(dòng)到結(jié)果集中下一行記錄位置。移動(dòng)到結(jié)果集中下一行記錄位置。 如果沒有記錄可讀,則如果沒有記錄可讀,則Read() 返回返回 false,此時(shí)應(yīng)關(guān)閉此時(shí)應(yīng)關(guān)閉 DataReaderGetXxx(index)獲取指定列的值,獲取指定列的值,index為從為從0開始的序列號開始的序列號GetValues()返回當(dāng)前行所有列的值,一個(gè)返回當(dāng)前行所有列的值,一個(gè) Object 類型的數(shù)組類型的數(shù)組IsDbNull(index)檢查某一列是否為空檢查某一列是否為空, index為從為從0開始的序列號開始的序列號GetName(index)獲取指定列的名稱

32、獲取指定列的名稱,index為從為從0開始的序列號開始的序列號GetOrdinal(name)在給定列名稱的情況下獲取列序號,在給定列名稱的情況下獲取列序號,name為列的名稱為列的名稱GetSchemaTable()返回一個(gè)返回一個(gè) DataTable,它描述它描述 SqlDataReader 的列元數(shù)據(jù)的列元數(shù)據(jù)n例如:例如: GetString、 GetInt32lGetString(ColumnPosition)(以基數(shù)零開始)8.3使用使用ADO.NET對象對象n使用使用 DataReader 對象處理一個(gè)結(jié)果集對象處理一個(gè)結(jié)果集n Item 屬性屬性l獲取指定名稱或序號位置的列值l

33、aReader“aColumnName” 或 aReadercolumnPosition8.3使用使用ADO.NET對象對象案例講解案例講解【案例案例8-2】使用使用Command對象對象ExecuteReader方方法舉例法舉例【案例案例8-3】使用使用Command對象對象ExecuteScalar方法方法舉例舉例【案例案例8-4】使用使用Command對象對象ExecuteNonQuery方法舉例方法舉例有哪些應(yīng)用適于在非連接環(huán)境下進(jìn)行操作:有哪些應(yīng)用適于在非連接環(huán)境下進(jìn)行操作:不需要及時(shí)得到反饋信息的,如數(shù)據(jù)的加工、整理的不需要及時(shí)得到反饋信息的,如數(shù)據(jù)的加工、整理的步驟、非工作時(shí)段數(shù)

34、據(jù)的更新等。步驟、非工作時(shí)段數(shù)據(jù)的更新等。三、執(zhí)行非連接環(huán)境下的數(shù)據(jù)庫操作三、執(zhí)行非連接環(huán)境下的數(shù)據(jù)庫操作SqlConnectionSqlDataAdapterDataSetSQL Server 7.0(以后以后)在非連接的環(huán)境中,當(dāng)處理數(shù)據(jù)在非連接的環(huán)境中,當(dāng)處理數(shù)據(jù)時(shí),資源無需保持在服務(wù)器端時(shí),資源無需保持在服務(wù)器端連接到連接到 SQLServer提交查詢命令提交查詢命令保存查詢結(jié)果到保存查詢結(jié)果到DataSet關(guān)閉連接關(guān)閉連接處理處理DataSet中的數(shù)據(jù)中的數(shù)據(jù)重建連接,將重建連接,將DataSet中的更新中的更新提交回提交回SQLServer非連接環(huán)境非連接環(huán)境 ADO.NET 類類

35、EmployeesOrdersCustomersProductsCategoriesCategoriesProductsSqlDataAdapterOleDbDataAdapterSQL Server 2000CustomersOrdersSQL Server 6.5數(shù)據(jù)集數(shù)據(jù)集XmlDataDocument三、執(zhí)行非連接環(huán)境下的數(shù)據(jù)庫操作三、執(zhí)行非連接環(huán)境下的數(shù)據(jù)庫操作DataSet、DataTable 和和 DataColumn 的概念的概念服務(wù)器服務(wù)器數(shù)據(jù)源數(shù)據(jù)源數(shù)據(jù)庫數(shù)據(jù)庫連接連接存儲(chǔ)過程存儲(chǔ)過程DataSetDataTableDataTableDataSet、DataTable、Da

36、taColumn的概念(續(xù))的概念(續(xù))n數(shù)據(jù)集數(shù)據(jù)集 (DataSet)l與關(guān)系數(shù)據(jù)庫相似的對象模型保存數(shù)據(jù):表、行、列l(wèi)可以在數(shù)據(jù)集中定義約束條件與關(guān)聯(lián)n數(shù)據(jù)表數(shù)據(jù)表 (DataTable)l代表了數(shù)據(jù)集中的表,可以從數(shù)據(jù)源加載數(shù)據(jù)l由數(shù)據(jù)列組成n數(shù)據(jù)列數(shù)據(jù)列 (DataColumn)l由 DataType 屬性指定對應(yīng)的數(shù)據(jù)類型l需要保持?jǐn)?shù)據(jù)列的數(shù)據(jù)類型與數(shù)據(jù)庫列的類型匹配DataSet 對象模型對象模型nDataSet 包含的集合包含的集合l表(Tables)集合(DataTable 對象的集合)l關(guān)系(Relations)集合(DataRelation 對象的集合)數(shù)據(jù)行數(shù)據(jù)行 Da

37、taRow數(shù)據(jù)列數(shù)據(jù)列 DataColumn數(shù)據(jù)表數(shù)據(jù)表 DataTable數(shù)據(jù)關(guān)系數(shù)據(jù)關(guān)系 DataRelation約束約束 Constraint構(gòu)建構(gòu)建 DataSet、DataTable 和和 DataColumnn四種創(chuàng)建方式:四種創(chuàng)建方式:n通過通過 DataAdapter “數(shù)據(jù)搬運(yùn)工數(shù)據(jù)搬運(yùn)工” 將數(shù)據(jù)從數(shù)據(jù)源搬運(yùn)到將數(shù)據(jù)從數(shù)據(jù)源搬運(yùn)到 DataSetn通過編程,通過編程,“純手工純手工”打造打造 DataSet 和和 DataTablen從從 XML 文件中獲取數(shù)據(jù)和架構(gòu)文件中獲取數(shù)據(jù)和架構(gòu)n通過圖形化方式通過圖形化方式l拖動(dòng)拖動(dòng) DataSet 控件到窗體并設(shè)置屬性控件到窗體

38、并設(shè)置屬性構(gòu)建構(gòu)建 DataSet 和和 DataTable(非類型化非類型化DataSet)n創(chuàng)建創(chuàng)建 DataSet 對象對象Dim ds As new DataSet(“Student”)l定義定義lDataSet表示數(shù)據(jù)源中數(shù)據(jù)的本地副本,必須要與數(shù)據(jù)表示數(shù)據(jù)源中數(shù)據(jù)的本地副本,必須要與數(shù)據(jù)源進(jìn)行交互。源進(jìn)行交互。DataAdapter就是二者之間的橋梁就是二者之間的橋梁l一方面負(fù)責(zé)將數(shù)據(jù)從數(shù)據(jù)源填充到一方面負(fù)責(zé)將數(shù)據(jù)從數(shù)據(jù)源填充到 DataSet中中;另一另一方面負(fù)責(zé)將方面負(fù)責(zé)將 DataSet 中的更新提交回?cái)?shù)據(jù)源中的更新提交回?cái)?shù)據(jù)源n為數(shù)據(jù)庫提供的主要兩種數(shù)據(jù)適配器為數(shù)據(jù)庫提供的

39、主要兩種數(shù)據(jù)適配器lSqlDataAdapter:不經(jīng)過不經(jīng)過OLEDB層直接與層直接與SQLServer交互,速度較交互,速度較OleDbDataAdapter快快lOleDbDataAdapter:適用于任何可以用適用于任何可以用OLEDB數(shù)據(jù)數(shù)據(jù)提供者訪問的數(shù)據(jù)源提供者訪問的數(shù)據(jù)源DataAdapter數(shù)據(jù)源數(shù)據(jù)源數(shù)據(jù)適配器數(shù)據(jù)適配器數(shù)據(jù)表數(shù)據(jù)表數(shù)據(jù)表數(shù)據(jù)表數(shù)據(jù)集數(shù)據(jù)集數(shù)據(jù)適配器數(shù)據(jù)適配器填充填充更新更新填充填充更新更新DataAdapterXxxDataAdapter對象模型對象模型sp_SELECTXxxCommandSelectCommandUpdateCommandInsertC

40、ommandDeleteCommandXxxDataAdapterXxxCommandXxxCommandXxxCommandXxxConnectionsp_UPDATEsp_INSERTsp_DELETEXxxDataReadernCommand 對象對象lDataAdapter使用使用Command對象對象與數(shù)據(jù)庫進(jìn)行通信與數(shù)據(jù)庫進(jìn)行通信lDataAdapter用來從數(shù)據(jù)庫中讀取數(shù)據(jù)的用來從數(shù)據(jù)庫中讀取數(shù)據(jù)的Command對象存儲(chǔ)在對象存儲(chǔ)在DataAdapter對象的對象的SelectCommand屬性屬性中中l(wèi)通過數(shù)據(jù)適配器可以將數(shù)據(jù)集中的改變提交到數(shù)據(jù)源,通過數(shù)據(jù)適配器可以將數(shù)據(jù)集中

41、的改變提交到數(shù)據(jù)源,Command對象保存在數(shù)據(jù)適配器的對象保存在數(shù)據(jù)適配器的InsertCommand、UpdateCommand和和DeleteCommand屬性屬性中中nDataTableMapping(數(shù)據(jù)表映射)集合(數(shù)據(jù)表映射)集合lDataTableMapping集合保存了數(shù)據(jù)集中的表、字段與數(shù)據(jù)庫集合保存了數(shù)據(jù)集中的表、字段與數(shù)據(jù)庫中的表、字段的映射關(guān)系中的表、字段的映射關(guān)系l數(shù)據(jù)庫中字段:數(shù)據(jù)庫中字段:Emp_Id、Emp_Namel數(shù)據(jù)集中的列:數(shù)據(jù)集中的列:EmployeeId、EmployeeNameXxxDataAdapter對象模型(續(xù))對象模型(續(xù))DataAda

42、pter 類的屬性和方法類的屬性和方法SqlDataAdapter.SelectCommand 屬性屬性從數(shù)據(jù)源中檢索行的從數(shù)據(jù)源中檢索行的Command對象對象在在 Fill 過程中使用的過程中使用的 SqlCommand,用來從數(shù)據(jù)庫中為用來從數(shù)據(jù)庫中為 DataSet 填填充記錄充記錄例:例:Dim cmd as new SqlCommand(“select * from student”,cn)Dim da as new SqlDataAdapterDa.SelectCommand = cmd或或Dim da as new SqlDataAdapter(cmd)DataAdapter

43、類的屬性和方法類的屬性和方法SqlDataAdapter.UpdateCommand 屬性屬性將修改的行從將修改的行從DataSet寫入數(shù)據(jù)源的寫入數(shù)據(jù)源的Command對象對象在在 Update 過程中使用的過程中使用的 SqlCommand,用于在數(shù)據(jù)庫中更新對應(yīng)用于在數(shù)據(jù)庫中更新對應(yīng)于于 DataSet 中已修改行的記錄中已修改行的記錄例:例:Dim cmd as new SqlCommand(“Update Student Set name = 王娜王娜 where stu_id = 200801001,cn)Dim da as new SqlDataAdapterDa.UpdateC

44、ommand = cmdDataAdapter 類的屬性和方法類的屬性和方法SqlDataAdapter.InsertCommand 屬性屬性將插入的行從將插入的行從DataSet寫入數(shù)據(jù)源的寫入數(shù)據(jù)源的Command對象對象在在 Update 過程中使用過程中使用 SqlCommand,以在數(shù)據(jù)庫中插入對應(yīng)于以在數(shù)據(jù)庫中插入對應(yīng)于 DataSet 中的新行的記錄中的新行的記錄例:例:Dim cmd as new SqlCommand(“Insert into Student Values(200801001,張紅張紅,女女,青島青島) ,cn)Dim da as new SqlDataAda

45、pterDa.InsertCommand = cmdSqlDataAdapter.DeleteCommand 屬性屬性從數(shù)據(jù)源中刪除行的從數(shù)據(jù)源中刪除行的Command對象對象在在 Update 過程中使用過程中使用 SqlCommand,以在數(shù)據(jù)庫中刪除對應(yīng)于以在數(shù)據(jù)庫中刪除對應(yīng)于 DataSet 中已刪除行的記錄中已刪除行的記錄例:例:Dim cmd as new SqlCommand(“Delete From Student where stu_id = 200801002 ,cn)Dim da as new SqlDataAdapterDa.DeleteCommand = cmdDat

46、aAdapter 類的屬性和方法類的屬性和方法數(shù)據(jù)適配器的方法數(shù)據(jù)適配器的方法Fill() 將數(shù)據(jù)源中的數(shù)據(jù)填充到數(shù)據(jù)集將數(shù)據(jù)源中的數(shù)據(jù)填充到數(shù)據(jù)集使用由使用由SelectCommand屬性指定的屬性指定的Select語句從數(shù)據(jù)源中讀取語句從數(shù)據(jù)源中讀取數(shù)據(jù)到數(shù)據(jù)集數(shù)據(jù)到數(shù)據(jù)集例:例:Dim ds As new DataSet(“Student”)Dim cmd as new SqlCommand(“select * from student”,cn)Dim da as new SqlDataAdapterDa.SelectCommand = cmdDa.Fill(ds)DataAdapter

47、 類的屬性和方法類的屬性和方法數(shù)據(jù)適配器的方法數(shù)據(jù)適配器的方法Update()將數(shù)據(jù)集中的數(shù)據(jù)更改回寫到數(shù)據(jù)源將數(shù)據(jù)集中的數(shù)據(jù)更改回寫到數(shù)據(jù)源為為 DataSet 中每個(gè)已插入、已更新或已刪除的行調(diào)用相應(yīng)的中每個(gè)已插入、已更新或已刪除的行調(diào)用相應(yīng)的 INSERT、UPDATE 或或 DELETE 語句語句DataAdapter 類的屬性和方法類的屬性和方法n自動(dòng)生成具有以下用途的單表命令:使對自動(dòng)生成具有以下用途的單表命令:使對 DataSet 所做的所做的更改與關(guān)聯(lián)的更改與關(guān)聯(lián)的 SQL Server 數(shù)據(jù)庫相協(xié)調(diào)數(shù)據(jù)庫相協(xié)調(diào)nPublic Sub New(ByVal Public Sub

48、New(ByVal adapteradapter As SqlDataAdapter ) As SqlDataAdapter ) - -使用關(guān)聯(lián)的使用關(guān)聯(lián)的 SqlDataAdapter SqlDataAdapter 對象初始化對象初始化 SqlCommandBuilder SqlCommandBuilder 類的新實(shí)例類的新實(shí)例Dim da As new SqlDataAdapter(“Select Dim da As new SqlDataAdapter(“Select * * From From Student”,cn)Student”,cn)Dim cmdBuilder As New SqlCommandBuilder(da)Dim cmdBuilder As New SqlCommandBuilder(da)SqlCommandBuilder 類類為為Window

溫馨提示

  • 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論