數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第1頁(yè)
數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第2頁(yè)
數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第3頁(yè)
數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第4頁(yè)
數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩137頁(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)介

1、第七章 數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)ADO.NET數(shù)據(jù)綁定數(shù)據(jù)控件17.1 ADO.NETADO.NET概念 ADO.NET是重要的應(yīng)用程序級(jí)接口,用于在.NET平臺(tái)上提供數(shù)據(jù)訪問(wèn)服務(wù)。在ADO.NET中,可以使用新的.NET Framework數(shù)據(jù)提供程序來(lái)訪問(wèn)數(shù)據(jù)源。ADO.NET是專(zhuān)為基于消息的Web應(yīng)用程序而設(shè)計(jì)的,同時(shí)還能夠?yàn)槠渌麘?yīng)用程序結(jié)構(gòu)提供較好的功能 ADO.NET的設(shè)計(jì)專(zhuān)門(mén)優(yōu)化了使用SqlClient訪問(wèn)數(shù)據(jù)的過(guò)程,并使用ADO.NET對(duì)象實(shí)現(xiàn)其數(shù)據(jù)處理。其對(duì)象模式與ADO類(lèi)似,由Connection(提供與數(shù)據(jù)源的連接)對(duì)象和Command對(duì)象(執(zhí)行數(shù)據(jù)庫(kù)命令以返回修改數(shù)據(jù),運(yùn)行存儲(chǔ)過(guò)程

2、等)組成 。 ADO.NET 是一組向 .NET 程序員公開(kāi)數(shù)據(jù)訪問(wèn)服務(wù)的類(lèi)。 ADO.NET 通過(guò)數(shù)據(jù)處理將數(shù)據(jù)訪問(wèn)分解為多個(gè)可以單獨(dú)使用或一前一后使用的不連續(xù)組件 ;ADO.NET的兩個(gè)核心組件:DataSet和.NET Framework數(shù)據(jù)提供程序(Connection Command DataReader DataAdapter) DataSet是ADO.NET結(jié)構(gòu)的核心組件 ADO.NET設(shè)計(jì)思想是從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)到內(nèi)存中,構(gòu)成內(nèi)存中的一個(gè)數(shù)據(jù)庫(kù)27.1 ADO.NETADO.NET與ADO ADO.NET將焦點(diǎn)集中在脫機(jī)的數(shù)據(jù)上,也就是說(shuō)當(dāng)ADO.NET從數(shù)據(jù)庫(kù)中獲取部分的數(shù)據(jù)

3、集后便切斷與數(shù)據(jù)庫(kù)系統(tǒng)之間的連接,使它變成脫機(jī)狀態(tài) 常駐內(nèi)存數(shù)據(jù)表示形式不同;ADO使用Recordset對(duì)象,該對(duì)象類(lèi)似一個(gè)單獨(dú)的表;ADO.NET使用DataSet對(duì)象,該對(duì)象包含由DataTable對(duì)象表示的一個(gè)或者多個(gè)表 ADO.NET不再支持Server端的Cursor,純粹是存儲(chǔ)在內(nèi)存中,所以執(zhí)行效率上有所提高;同時(shí),DataSet對(duì)象以XML的格式顯示,所以能夠在多個(gè)程序之間流通,達(dá)到數(shù)據(jù)共享的目的 為了訪問(wèn)各種不同的數(shù)據(jù)庫(kù)系統(tǒng)或者不同的數(shù)據(jù)集,ADO.NET提供了若干個(gè)命名空間供ASP.NET使用;編程時(shí)只需要在程序代碼中把這些命名空間導(dǎo)入,以聲明正確的數(shù)據(jù)類(lèi)型,而并非像ASP

4、頁(yè)面那樣是通過(guò)Server對(duì)象的CreatObject()方法創(chuàng)建37.1 ADO.NETSystem.Data命名空間ADO.NET技術(shù)核心,它提供ADO.NET編程模型內(nèi)的數(shù)據(jù)訪問(wèn)的基本功能。DataSet位于該命名空間中,它包括其他類(lèi)如:DataTable、DataRow和DataView等。System.Data命名空間中還包括一個(gè)重要的枚舉類(lèi)型SqlDbType,它的成員表示了SQL Server內(nèi)部的數(shù)據(jù)類(lèi)型System.Data.Common命名空間該命名空間包含由.NET Framework數(shù)據(jù)提供程序共享的類(lèi)。數(shù)據(jù)提供程序描述一個(gè)類(lèi)的集合,這些類(lèi)用于在托管空間中訪問(wèn)數(shù)據(jù)源???/p>

5、通過(guò)繼承,也通過(guò).NET數(shù)據(jù)訪問(wèn)提供程序來(lái)實(shí)現(xiàn)共享。DataAdapter是一個(gè)抽象類(lèi),用于連接DataSet對(duì)象和數(shù)據(jù)源System.Data.OleDbSystem.Data.OleDb是第一個(gè)被加入到.NET Framework中的為數(shù)據(jù)訪問(wèn)提供程序的命名空間,它通過(guò)OLE DB提供程序。OleDbDataAdapter、OleDbCommand、OleDbDataReader和OleDbConnection提供了使用眾多支持OLE DB數(shù)據(jù)源必需的所有功能47.1 ADO.NETSystem.Data.SqlClient命名空間SqlClient提供程序是完全為訪問(wèn)SQL Server

6、數(shù)據(jù)庫(kù)而設(shè)計(jì)的。 SQLDbDataAdapter、SQLDbCommand、SQLDbDataReader、SQLDbConnection和DataSet類(lèi)能夠?qū)QL Server數(shù)據(jù)庫(kù)執(zhí)行任何操作System.Data.SqlTypes命名空間該命名空間中主要包含映射到SQL Server數(shù)據(jù)庫(kù)內(nèi)部數(shù)據(jù)類(lèi)型的結(jié)構(gòu)System.Data.Odbc 命名空間用于 ODBC 的.NET Framework 數(shù)據(jù)提供程序描述用來(lái)訪問(wèn)托管空間中的 ODBC 數(shù)據(jù)源的類(lèi)集合。System.Data.OracleClient命名空間用于 Oracle 的 .NET Framework 數(shù)據(jù)提供程序描述

7、了用于在托管空間中訪問(wèn) Oracle 數(shù)據(jù)源的類(lèi)集合。57.1 ADO.NETADO.NET結(jié)構(gòu) 67.1 ADO.NETADO.NET的對(duì)象對(duì)象屬性Connection對(duì)象用于連接到數(shù)據(jù)庫(kù)或其它數(shù)據(jù)源Command對(duì)象用于在數(shù)據(jù)庫(kù)中檢索、編輯、刪除、或插入數(shù)據(jù)DataReader對(duì)象從數(shù)據(jù)源中讀取只進(jìn)且只讀的數(shù)據(jù)流DataAdapter對(duì)象用于將數(shù)據(jù)源中的數(shù)據(jù)填充到DataSet中,并將在DataSet中數(shù)據(jù)的變化返回到數(shù)據(jù)庫(kù)中??梢詫?shù)據(jù)適配器看作是DataSet與數(shù)據(jù)庫(kù)之間的橋梁。DataSet數(shù)據(jù)集,相當(dāng)于駐留在內(nèi)存中的數(shù)據(jù)庫(kù)77.1 ADO.NETSQL數(shù)據(jù)庫(kù)字段類(lèi)型char(siz

8、e)用于保存定長(zhǎng)(size)字節(jié)的字符串?dāng)?shù)據(jù)。每行定長(zhǎng)(不足部分補(bǔ)為空格);最大長(zhǎng)度為255字節(jié),缺省值為每行1字節(jié)varchar(size)用于保存變長(zhǎng)的字符串?dāng)?shù)據(jù)。其中最大字節(jié)長(zhǎng)度由(size)指定。 每行長(zhǎng)度可變,最大長(zhǎng)度為255字節(jié)。數(shù)據(jù)長(zhǎng)度缺省為1nchar(size)多字節(jié)字符串。 每行定長(zhǎng)(不足部分補(bǔ)為空格)。 長(zhǎng)度(size)是指字符的個(gè)數(shù)。nvarchar(size)可變長(zhǎng),多字節(jié)字符串。 每行變長(zhǎng)。長(zhǎng)度(size)是指字符的個(gè)數(shù)。binary(size)固定長(zhǎng)度的二進(jìn)制字符串。 每行定長(zhǎng)(不足部分補(bǔ)為空格);最大長(zhǎng)度為255字節(jié),缺省值為每行1字節(jié)。varbinary(si

9、ze)可變長(zhǎng)度的長(zhǎng)度的二進(jìn)制字符串。 每行長(zhǎng)度可變,最大長(zhǎng)度為255字節(jié)。數(shù)據(jù)長(zhǎng)度缺省為1timestamp用于改變管理的二進(jìn)制值。 字節(jié)數(shù)為16datetime保存定長(zhǎng)的日期時(shí)間數(shù)據(jù),范圍為1753年1月1日到公元9999年12月21日,精度為3微秒間隔。 每行固定為8字節(jié)長(zhǎng)度。smalldatetime保存定長(zhǎng)的日期時(shí)間數(shù)據(jù),范圍為1990年1月1日到公元2079年6月6日,精度為分鐘間隔。 每行固定為4字節(jié)長(zhǎng)度。int保存整型數(shù)據(jù),范圍為-2147483647到+2147483647。 最大長(zhǎng)度為4字節(jié)32 - 1字節(jié)或4G。87.1 ADO.NETSQL數(shù)據(jù)庫(kù)字段類(lèi)型9SQL數(shù)據(jù)庫(kù)字段

10、類(lèi)型(1)二進(jìn)制數(shù)據(jù)類(lèi)型二進(jìn)制數(shù)據(jù)包括 Binary、Varbinary 和 ImageBinary 數(shù)據(jù)類(lèi)型既可以是固定長(zhǎng)度的(Binary),也可以是變長(zhǎng)度的。Binary(n) 是 n 位固定的二進(jìn)制數(shù)據(jù)。其中,n 的取值范圍是從 1 到 8000。其存儲(chǔ)的大小是 n + 4 個(gè)字節(jié)。Varbinary(n) 是 n 位變長(zhǎng)度的二進(jìn)制數(shù)據(jù)。其中,n 的取值范圍是從 1 到 8000。其存儲(chǔ)的大小是 n + 4個(gè)字節(jié),不是n 個(gè)字節(jié)。在 Image 數(shù)據(jù)類(lèi)型中存儲(chǔ)的數(shù)據(jù)是以位字符串存儲(chǔ)的,不是由 SQL Server 解釋的,必須由應(yīng)用程序來(lái)解釋。例如,應(yīng)用程序可以使用BMP、TIEF、G

11、IF 和 JPEG 格式把數(shù)據(jù)存儲(chǔ)在 Image 數(shù)據(jù)類(lèi)型中。 如果要存儲(chǔ)的各種二進(jìn)制數(shù)據(jù)的大小比較一致,那么建議使用Binary(n)數(shù)據(jù)類(lèi)型。如果將要存儲(chǔ)的二進(jìn)制數(shù)據(jù)之間的大小差別比較大,那么應(yīng)該使用Varbinary(n)數(shù)據(jù)類(lèi)型。如果將要存儲(chǔ)的二進(jìn)制數(shù)據(jù)大于8000字節(jié),那么必須使用Varbinary(MAX)數(shù)據(jù)類(lèi)型(2)字符數(shù)據(jù)類(lèi)型字符數(shù)據(jù)的類(lèi)型包括 Char,Varchar 和 Text字符數(shù)據(jù)是由任何字母、符號(hào)和數(shù)字任意組合而成的數(shù)據(jù)。 Varchar 是變長(zhǎng)字符數(shù)據(jù),其長(zhǎng)度不超過(guò) 8KB。Char 是定長(zhǎng)字符數(shù)據(jù),其長(zhǎng)度最多為 8KB。超過(guò) 8KB 的ASCII 數(shù)據(jù)可以使用

12、 Text數(shù)據(jù)類(lèi)型存儲(chǔ)。例如,因?yàn)?Html 文檔全部都是 ASCII 字符,并且在一般情況下長(zhǎng)度超過(guò) 8KB,所以這些文檔可以 Text 數(shù)據(jù)類(lèi)型存儲(chǔ)在SQL Server 中。10(3)Unicode 數(shù)據(jù)類(lèi)型Unicode 數(shù)據(jù)類(lèi)型包括 Nchar,Nvarchar 和Ntext使用這種字符類(lèi)型存儲(chǔ)的列可以存儲(chǔ)多個(gè)字符集中的字符。當(dāng)列的長(zhǎng)度變化時(shí),應(yīng)該使用 Nvarchar 字符類(lèi)型,這時(shí)最多可以存儲(chǔ) 4000 個(gè)字符。當(dāng)列的長(zhǎng)度固定不變時(shí),應(yīng)該使用 Nchar 字符類(lèi)型,同樣,這時(shí)最多可以存儲(chǔ) 4000 個(gè)字符。當(dāng)使用 Ntext 數(shù)據(jù)類(lèi)型時(shí),該列可以存儲(chǔ)多于 4000 個(gè)字符。 va

13、rchar在SQL Server中是采用單字節(jié)來(lái)存儲(chǔ)數(shù)據(jù)的,nvarchar是使用Unico來(lái)存儲(chǔ)數(shù)據(jù)的中文字符存儲(chǔ)到SQL Server中會(huì)保存為兩個(gè)字節(jié)(一般采用Unico編碼),英文字符保存到數(shù)據(jù)庫(kù)中,如果字段的類(lèi)型為varchar,則只會(huì)占用一個(gè)字節(jié),而如果字段的類(lèi)型為nvarchar,則會(huì)占用兩個(gè)字節(jié)兩字段分別有字段值:“我和coffee”。那么varchar字段占22+6=10個(gè)字節(jié)的存儲(chǔ)空間,而nvarchar字段占82=16個(gè)字節(jié)的存儲(chǔ)空間。如字段值只是英文可選擇varchar,而字段值存在較多的雙字節(jié)(中文、韓文等)字符時(shí)用nvarchar。 (4)日期和時(shí)間數(shù)據(jù)類(lèi)型日期和時(shí)

14、間數(shù)據(jù)類(lèi)型包括 Datetime 和 Smalldatetime兩種類(lèi)型日期和時(shí)間數(shù)據(jù)類(lèi)型由有效的日期和時(shí)間組成。 例如,有效的日期和時(shí)間數(shù)據(jù)包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一個(gè)數(shù)據(jù)類(lèi)型是日期在前,時(shí)間在后;后一個(gè)數(shù)據(jù)類(lèi)型是時(shí)間在前,日期在后。在 Microsoft SQL Server中,日期和時(shí)間數(shù)據(jù)類(lèi)型包括 Datetime 和 Smalldatetime 兩種類(lèi)型時(shí),所存儲(chǔ)的日期范圍是從 1753 年 1 月 1 日開(kāi)始,到9999 年12 月 31 日結(jié)束(每一個(gè)值要求 8 個(gè)存儲(chǔ)字節(jié))。使用 Smal

15、ldatetime 數(shù)據(jù)類(lèi)型時(shí),所存儲(chǔ)的日期范圍是 1900年 1 月 1日 開(kāi) 始,到 2079 年 12 月 31 日結(jié)束(每一個(gè)值要求 4 個(gè)存儲(chǔ)字節(jié))。日期的格式可以設(shè)定。設(shè)置日期格式的命令如下:Set DateFormat format | format _var|其中,format | format_var 是日期的順序。有效的參數(shù)包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默認(rèn)情況下,日期格式為MDY。11(5)數(shù)字?jǐn)?shù)據(jù)類(lèi)型數(shù)字?jǐn)?shù)據(jù)只包含數(shù)字。數(shù)字?jǐn)?shù)據(jù)類(lèi)型包括正數(shù)和負(fù)數(shù)、小數(shù)(浮點(diǎn)數(shù))和整數(shù)整數(shù)由正整數(shù)和負(fù)整數(shù)組成,例如 39、25、0-2和33967。在SQL

16、Server 中,整數(shù)存儲(chǔ)的數(shù)據(jù)類(lèi)型是Int,Smallint和Tinyint。Int數(shù)據(jù)類(lèi)型存儲(chǔ)數(shù)據(jù)的范圍大于 Smallint 數(shù)據(jù)類(lèi)型存儲(chǔ)數(shù)據(jù)的范圍,而Smallint 據(jù)類(lèi)型存儲(chǔ)數(shù)據(jù)的范圍大于Tinyint 數(shù)據(jù)類(lèi)型存儲(chǔ)數(shù)據(jù)的范圍。使用 Int 存儲(chǔ)數(shù)據(jù)的范圍是從 -2 147 483 648 到 2 147 483 647(每一個(gè)值要求4個(gè)字節(jié)存儲(chǔ)空間)。使用Smallint數(shù)據(jù)類(lèi)型時(shí),存儲(chǔ)數(shù)據(jù)的范圍從 -32 768 到 32 767(每一個(gè)值要求2個(gè)字節(jié)存儲(chǔ)空間)。使用Tinyint 數(shù)據(jù)類(lèi)型時(shí),存儲(chǔ)數(shù)據(jù)的范圍是從0 到255(每一個(gè)值要求1個(gè)字節(jié)存儲(chǔ)空間)。精確小數(shù)數(shù)據(jù)在 SQ

17、L Server 中的數(shù)據(jù)類(lèi)型是 Decimal 和 Numeric。這種數(shù)據(jù)所占的存儲(chǔ)空間根據(jù)該數(shù)據(jù)的位數(shù)來(lái)確定。在SQL Server 中,小數(shù)數(shù)據(jù)的數(shù)據(jù)類(lèi)型是 Float 和 Real。例如,三分之一這個(gè)分?jǐn)?shù)記作0.3333333,當(dāng)使用近似數(shù)據(jù)類(lèi)型時(shí)能準(zhǔn)確表示。因此,從系統(tǒng)中檢索到的數(shù)據(jù)可能與存儲(chǔ)在該列中數(shù)據(jù)不完全一樣。(6)貨幣數(shù)據(jù)表示正的或者負(fù)的貨幣數(shù)量 在 SQL Server 中,貨幣數(shù)據(jù)的數(shù)據(jù)類(lèi)型是Money 和 SmallmoneyMoney數(shù)據(jù)類(lèi)型要求 8 個(gè)存儲(chǔ)字節(jié),Smallmoney 數(shù)據(jù)類(lèi)型要求 4 個(gè)存儲(chǔ)字節(jié)。(7)特殊數(shù)據(jù)類(lèi)型特殊數(shù)據(jù)類(lèi)型包括前面沒(méi)有提過(guò)的數(shù)據(jù)

18、類(lèi)型。特殊的數(shù)據(jù)類(lèi)型有3種,即 Timestamp、Bit 和 Uniqueidentifier。Timestamp 用于表示SQL Server 活動(dòng)的先后順序,以二進(jìn)投影的格式表示。Timestamp 數(shù)據(jù)與插入數(shù)據(jù)的日期和時(shí)間沒(méi)有關(guān)系。Bit 由 1 或者 0 組成。當(dāng)表示真或者假、ON 或者 OFF 時(shí),使用 Bit 數(shù)據(jù)類(lèi)型。 Uniqueidentifier 由 16 字節(jié)的十六進(jìn)制數(shù)字組成,表示一個(gè)全局唯一的。當(dāng)表的記錄行要求唯一時(shí),GUID是非常有用。例如,在客戶(hù)標(biāo)識(shí)號(hào)列使用這種數(shù)據(jù)類(lèi)型可以區(qū)別不同的客戶(hù)。127.1 ADO.NETADO.NET支持的數(shù)據(jù)源 ADO.NET 1

19、.0版本主要提供兩種數(shù)據(jù)提供程序,分別是SQL Server.NET和OLE DB.NET數(shù)據(jù)提供程序。而ADO.NET1.1提供4種數(shù)據(jù)提供程序,除了1.0提供的兩種之外,還包括OracleDB.NET數(shù)據(jù)提供程序和ODBC.NET數(shù)據(jù)提供程序。 數(shù)據(jù)提供程序訪問(wèn)對(duì)象SQL Server.NET數(shù)據(jù)提供程序的SqlConnection連接對(duì)象主要訪問(wèn)SQL Server2000及以上版本命名空間System.Data.SqlClient.SqlConnectionOLEDB.NET數(shù)據(jù)提供程序的OleDbConnection連接對(duì)象主要訪問(wèn)SQL Server 7.0及以下和其他數(shù)據(jù)庫(kù)命名空

20、間System.Data.OleDb.OleDbConectionOracleDB.NET數(shù)據(jù)提供程序的OracleConnection連接對(duì)象主要訪問(wèn)Oracle 8i、Oracle 9i及以上的版本命名空間System.Data.OracleClient.OracleConectionODBC.NET數(shù)據(jù)提供程序的OdbcConnection連接對(duì)象主要訪問(wèn)ODBC數(shù)據(jù)源命名空間System.Data.Odbc.OdbcConection137.1 ADO.NETConnection對(duì)象 Connection類(lèi)主要處理對(duì)數(shù)據(jù)庫(kù)的連接和管理數(shù)據(jù)庫(kù)事務(wù),它是操作數(shù)據(jù)庫(kù)的基礎(chǔ)。該類(lèi)表示應(yīng)用程序和

21、數(shù)據(jù)源之間唯一的會(huì)話。ConnectionString屬性 :獲取或設(shè)置用戶(hù)打開(kāi)數(shù)據(jù)庫(kù)的連接字符串AttachDB 關(guān)鍵字:主數(shù)據(jù)庫(kù)文件的名稱(chēng),包括可連接數(shù)據(jù)庫(kù)的完整路徑名。該路經(jīng)可以是絕對(duì)路徑,也可以是相對(duì)路徑,這取決于是否使用 DataDirectory 替換字符串。如果使用 DataDirectory,則對(duì)應(yīng)的數(shù)據(jù)庫(kù)文件必須存在于替換字符串指向的目錄的子目錄中。遠(yuǎn)程服務(wù)器、HTTP 及 UNC 路徑名不受支持。必須按照如下方式使用關(guān)鍵字“database”(或其別名之一)指定數(shù)據(jù)庫(kù)名稱(chēng):Connection Timeout 關(guān)鍵字:獲取在嘗試建立連接時(shí)終止嘗試并生成錯(cuò)誤之前所等待的時(shí)間(

22、以秒為單位),默認(rèn)值為15秒。值為0表示沒(méi)有對(duì)等待時(shí)間進(jìn)行設(shè)置,而不是表示沒(méi)有等待時(shí)間。Data Source 或Server關(guān)鍵字:要連接的 SQL Server 實(shí)例的名稱(chēng)或網(wǎng)絡(luò)地址或其他數(shù)據(jù)源服務(wù)器名或文件名。可以在服務(wù)器名稱(chēng)之后指定端口號(hào): 指定本地實(shí)例時(shí),始終使用 (local)。Initial Catalog 或Database關(guān)鍵字:當(dāng)前數(shù)據(jù)庫(kù)或連接打開(kāi)后要使用的數(shù)據(jù)庫(kù)的名稱(chēng)。Integrated Security 或Trusted_Connection關(guān)鍵字:當(dāng)為 false 時(shí),將在連接中指定用戶(hù) ID 和密碼。當(dāng)為 true 時(shí),將使用當(dāng)前的 Windows 帳戶(hù)憑據(jù)進(jìn)行身

23、份驗(yàn)證??勺R(shí)別的值為 true、false、yes、no 以及與 true 等效的 sspi(強(qiáng)烈推薦)。 默認(rèn)為false。 AttachDbdataYourDB.mdf;integrated security=true;database=YourDatabase server=tcp:servername, portnumber 147.1 ADO.NETPassword 或Pwd關(guān)鍵字:SQL Server 帳戶(hù)登錄的密碼。建議不要使用。為保持高安全級(jí)別,我們強(qiáng)烈建議您使用 Integrated Security 關(guān)鍵字。User ID 或Uid關(guān)鍵字:SQL Server 登錄帳戶(hù)。建

24、議不要使用。為保持高安全級(jí)別,我們強(qiáng)烈建議您使用 Integrated Security 關(guān)鍵字。State屬性:連接的當(dāng)前狀態(tài)。默認(rèn)為ClosedBroken:與數(shù)據(jù)源的連接中斷。只有在連接打開(kāi)之后才可能發(fā)生這種情況。可以關(guān)閉處于這種狀態(tài)的連接,然后重新打開(kāi)。Closed:連接處于關(guān)閉狀態(tài)。 Connecting:連接對(duì)象正在與數(shù)據(jù)源連接。Executing :連接對(duì)象正在執(zhí)行命令。Fetching :連接對(duì)象正在檢索數(shù)據(jù)。Open:連接處于打開(kāi)狀態(tài)。 ServerVersion 屬性:獲取包含客戶(hù)端所連接到的服務(wù)器的版本的字符串。 157.1 ADO.NETOLEDbConnection

25、使用ADO.NET連接到OLEDB數(shù)據(jù)源(Access、Excel)上時(shí),需要使用OLEDbConnection對(duì)象。建立一個(gè)Connection對(duì)象:Provider:數(shù)據(jù)源的程序提供者。例如:Access的提供者是Microsoft.Jet.OLE DB.4.0?!纠咳缫粋€(gè)連接Access數(shù)據(jù)庫(kù)的連接語(yǔ)句代碼如下:OLEDbConnection還有open和close這兩個(gè)常用方法,分別表示數(shù)據(jù)庫(kù)的打開(kāi)和關(guān)閉。以下是一個(gè)如何創(chuàng)建和打開(kāi)與OLE DB數(shù)據(jù)源的連接: OleDbconnection myconn=new Oledbconnection(“Provider=Microsoft.

26、Jet.OLE DB.4.0;DataSource=c:database1.mdb”); Myconn.open(); /打開(kāi)數(shù)據(jù)庫(kù) Myconn.close(); /關(guān)閉數(shù)據(jù)庫(kù)OleDbConnection myconnection=new OleDbConnection(ConnectionString) string ConnectionString=“rovider=Microsoft.Jet.OLEDB.4.0;DataSource=c:Database1.mdb”167.1 ADO.NETSqlConnection SQL Server.NET數(shù)據(jù)提供程序使用SqlConnecti

27、on對(duì)象提供了與Microsoft SQL Server版本7.0或更高版本的連接。例:8.1建立一個(gè)SqlConnection連接Conn.open(); /打開(kāi)數(shù)據(jù)庫(kù) Conn.close(); /關(guān)閉數(shù)據(jù)庫(kù) Conn.ChangeDatabase(); /打開(kāi)的SqlConnection更改當(dāng)前數(shù)據(jù)庫(kù)OdbcConnection ODBC.NET數(shù)據(jù)提供程序使用OdbcConnection對(duì)象提供了與ODBC數(shù)據(jù)源的連接。Driver屬性:獲取為當(dāng)前連接指定的 ODBC 驅(qū)動(dòng)程序名稱(chēng)。它通常是 DLL 名稱(chēng)(例如 Sqlsrv32.dll)。在打開(kāi)連接前,默認(rèn)值一直為空字符串 ()。 O

28、racleConnection Oracle.NET數(shù)據(jù)提供程序使用OracleConnection對(duì)象提供了與Oracle數(shù)據(jù)庫(kù)的連接和操作。SqlConnection conn=new SqlConnection(“DataSource=localhost; Integrated Security=SSPI;Initial Catalog=EXF_DB”);17ASP.NET數(shù)據(jù)庫(kù)連接字符串總結(jié)一、使用OleDbConnection對(duì)象連接OLE DB數(shù)據(jù)源1連接Access 數(shù)據(jù)庫(kù)Access 2000: Access 2003: Access 2007:備注:Access數(shù)據(jù)庫(kù)只提供兩

29、個(gè)連接屬性provider(數(shù)據(jù)提供程序)和data source(數(shù)據(jù)源);Access20002003的文件格式是”.mdb”,,Access2007的文件格式是”.accdb”;Access的數(shù)據(jù)提供程序版本是向下兼容的,在Win7下測(cè)試使用Microsoft.Jet.OLEDB.3.5提示未在本地計(jì)算機(jī)上注冊(cè)“Microsoft.Jet.OLEDB.3.5”提供程序。改用Microsoft.Jet.OLEDB.4.0或者M(jìn)icrosoft.Ace.OLEDB12.0完全可以訪問(wèn)Access2000的數(shù)據(jù)庫(kù)文件。當(dāng)然也可以嘗試使用微軟提供的MDAC來(lái)修改provider的版本2連接Exc

30、el數(shù)據(jù)庫(kù)Excel 2003:Excel 2007:備注:在代碼中引用工作表時(shí),應(yīng)將表名表示為”工作表名$”,遇到字段為數(shù)據(jù)庫(kù)保留關(guān)鍵字時(shí),給該字段名加上以示區(qū)別,如定義select 語(yǔ)句時(shí):string connStr=“select * from login$ where username=abc and password=abc123 “;如果在數(shù)據(jù)表中用數(shù)字作為文本類(lèi)型數(shù)據(jù)時(shí),則應(yīng)在數(shù)字前加單引號(hào)將默認(rèn)的數(shù)值強(qiáng)行設(shè)定為文本類(lèi)型?!皃rovider=Microsoft.Jet.Oledb.3.5;Data Source=Access文件路徑”“provider=Microsoft.Je

31、t.Oledb.4.0;Data Source=Access文件路徑”“provider=Microsoft.Ace.Oledb.12.0;Data Source=Access文件路徑”“provider=Microsoft.Jet.OLEDB.4.0;Data Source=Access文件路徑;extended properties=excel 8.0”“provider=Microsoft.Ace.OLEDB.12.0;Data Source=Access文件路徑;extended properties=excel 12.0”18ASP.NET數(shù)據(jù)庫(kù)連接字符串總結(jié)二、使用SqlConne

32、ction對(duì)象連接SQL Server數(shù)據(jù)庫(kù)設(shè)置數(shù)據(jù)庫(kù)文件路徑的方法:1使用絕對(duì)路徑:2使用服務(wù)器相對(duì)路徑:3使用最簡(jiǎn)單的相對(duì)路徑:“|DataDirectory|”代表ASP.NET項(xiàng)目里自動(dòng)創(chuàng)建的App_Data文件夾1以SQL Server驗(yàn)證模式連接SQLServer(1)以數(shù)據(jù)庫(kù)名連接方式(2)以數(shù)據(jù)庫(kù)文件完整路徑連接方式示例:Server=.SQLEXPRESS; Database=DatabaseName; User ID =sa; Password=abc123” Server=.SQLEXPRESS; Initial Catalog =DatabaseName; Uid =s

33、a; Pwd=abc123” Server=(local)SQLEXPRESS; AttachDb:Solution1WebApp_Datadata.mdf;User ID =sa; Password=abc123” 備注:密碼可以為空?!癆ttachDb:Solution1WebApp_Datadata.mdf”“AttachDb= + System.Web.HttpContext.Current.Server.MapPath(App_DataDatabase.mdf)“AttachDb=|DataDirectory|data.mdf”Server=服務(wù)器名; Database=數(shù)據(jù)庫(kù)名稱(chēng);

34、 User ID=用戶(hù)名; Password=密碼 或者(使用縮寫(xiě)與別名)Server=服務(wù)器名; Initial Catalog=數(shù)據(jù)庫(kù)名稱(chēng); Uid=用戶(hù); Pwd=密碼“Serve=服務(wù)器名;AttachDb數(shù)據(jù)庫(kù)文件路徑;User ID=用戶(hù)名;Password=密碼”19ASP.NET數(shù)據(jù)庫(kù)連接字符串總結(jié)2以Windows 驗(yàn)證模式連接SQL Server(1)以數(shù)據(jù)庫(kù)名連接方式(2)以數(shù)據(jù)庫(kù)文件完整路徑連接方式示例:Server=服務(wù)器名; Database=數(shù)據(jù)庫(kù)名稱(chēng); Integrated Security=SSPI Server=(local)SQLEXPRESS; Atta

35、chDb:Solution1WebApp_Datadata.mdf; Integrated Security=true” 備注:SSPI即為true三、使用OdbcConnection對(duì)象連接ODBC數(shù)據(jù)源示例:首先要在計(jì)算機(jī)管理數(shù)據(jù)源配置好相對(duì)應(yīng)的數(shù)據(jù)源(選擇數(shù)據(jù)庫(kù)類(lèi)型,設(shè)置數(shù)據(jù)庫(kù)文件路徑與相對(duì)應(yīng)的數(shù)據(jù)庫(kù)名)Driver= Microsoft.Jet.OLEDB.4.0; Server=.SQLEXPRESS; Database=DatabaseName; Trusted_Connection=yes四、使用OracleConnection對(duì)象連接Oracle數(shù)據(jù)庫(kù)“Server=服務(wù)器名;

36、 Database=數(shù)據(jù)庫(kù)名稱(chēng); Integrated Security=SSPI” “Serve=服務(wù)器名;AttachDb數(shù)據(jù)庫(kù)文件路徑; Integrated Security=true”“Driver=數(shù)據(jù)庫(kù)提供程序名;Server=服務(wù)器名; Database=數(shù)據(jù)庫(kù)名;Trusted_Connection=yes”“Data Source=Oracle8i; Integrated Security=yes”20ASP.NET數(shù)據(jù)庫(kù)連接字符串總結(jié)五、在ASP.NET項(xiàng)目中的web.config文件里配置數(shù)據(jù)庫(kù)連接并在程序代碼中獲取連接字符串1在 標(biāo)簽里添加連接或者在程序代碼中獲取 標(biāo)

37、簽里的連接字符串:引用命名空間:2在標(biāo)簽里添加連接或者在程序代碼中獲取 標(biāo)簽里的連接字符串:引用命名空間: Using System.Configuration ;string connStr = ConfigurationManager.ConnectionStringsConnectionName.ToString(); Using System.Configuration ; string connStr = ConfigurationManager.AppSettingsConnectionName.ToString(); 217.1 ADO.NETConnection事件 具有兩個(gè)事

38、件,它們可用于從數(shù)據(jù)源中檢索信息性消息或確定Connection的狀態(tài)是否已被改變InfoMessage:當(dāng)從數(shù)據(jù)中返回信息性消息(指數(shù)據(jù)庫(kù)中不會(huì)引發(fā)異常的消息)時(shí)發(fā)生。 注意:1.InfoMessage事件從數(shù)據(jù)庫(kù)中檢索警告和信息性消息,異常信息不在檢索范圍內(nèi) 2.對(duì)于SQL Server任何嚴(yán)重度等于小于10的消息都被視為信息性消息 3.InfoMessage事件接收SqlInfoMessageEventArgs對(duì)象,該對(duì)象在其Error屬性中包含來(lái)自數(shù)據(jù)庫(kù)消息的集合,用戶(hù)可查詢(xún)Error對(duì)象,以獲取錯(cuò)誤號(hào)和消息文本以及錯(cuò)誤來(lái)源 StateChange:當(dāng)Connection狀態(tài)出現(xiàn)更改時(shí)

39、發(fā)生 注意:1.只要Connection對(duì)象的狀態(tài)發(fā)生變化,StateChange事件就會(huì)被激活 2.OriginalState指示Connection在更改前的狀態(tài);CurrentStae指示Connection更改后的狀態(tài)227.1 ADO.NETCommand對(duì)象 對(duì)數(shù)據(jù)庫(kù)的操作有查詢(xún)、插入、刪除和更新等,這些操作都是ASP.NET開(kāi)發(fā)中經(jīng)常用到的。在創(chuàng)建了一個(gè)Connection對(duì)象后,就需要?jiǎng)?chuàng)建Command對(duì)象實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。SqlCommand常用屬性CommandText用于設(shè)置SqlCommand執(zhí)行的SQL語(yǔ)句,可以是任何合法的SQL語(yǔ)句(包括INSERT、UPDATE

40、、SELECT等)。除了可以執(zhí)行SQL語(yǔ)句外,當(dāng)CommandType設(shè)置為存儲(chǔ)過(guò)程時(shí),CommandText的值就是存儲(chǔ)過(guò)程的名稱(chēng)。CommandTimeout在命令開(kāi)始檢索結(jié)果前的等待時(shí)間,而非命令執(zhí)行所需要的時(shí)間。CommandType獲取或設(shè)置Command對(duì)象要執(zhí)行命令的類(lèi)型(如SQL命令、存儲(chǔ)過(guò)程、數(shù)據(jù)表)Connection獲取或設(shè)置SqlCommand的實(shí)例使用的SqlConnection對(duì)象名稱(chēng)Parameters在執(zhí)行SQL語(yǔ)句中需要的參數(shù)設(shè)置237.1 ADO.NET成員名說(shuō)明Text默認(rèn)值,用于執(zhí)行SQL語(yǔ)句,Command對(duì)象可以把該文本的值傳遞給數(shù)據(jù)庫(kù)不需要任何處理

41、StoredProcedure存儲(chǔ)過(guò)程,用于調(diào)用并執(zhí)行存儲(chǔ)過(guò)程命令,存儲(chǔ)過(guò)程是把多個(gè)命令集中起來(lái)一次提交給數(shù)據(jù)庫(kù),從而來(lái)提高數(shù)據(jù)庫(kù)的執(zhí)行效率。TableDirect它從數(shù)據(jù)庫(kù)返回一個(gè)完整的表,等價(jià)于“Select *Form TableName”來(lái)調(diào)用Text類(lèi)型的Command命令,該類(lèi)型命令只有OLE DB托管提供程序 CommandType取值范圍和意義247.1 ADO.NETSqlCommand常用方法 Cancel試圖取消SqlCommand的執(zhí)行CreatParameter創(chuàng)建SqlParameter對(duì)象的新實(shí)例Dispose釋放由Component占用的資源ExecuteNon

42、Query該方法主要執(zhí)行UPDATE、INSERT或DELETE這樣的SQL語(yǔ)句,對(duì)于UPDATE、INSERT和DELETE語(yǔ)句,對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行修改,返回值為該命令所影響的行數(shù)。對(duì)于SELECT語(yǔ)句,返回值為-1。如果發(fā)生回滾,返回值也為-1。ExecuteReader將CommandText發(fā)送到Connection并生成一個(gè)SqlDataReaderExecuteScalar該方法主要返回結(jié)果集中第一行的第一列,由于它只能返回一個(gè)值,通??梢岳盟鼇?lái)獲取聚合值。例如:購(gòu)物中共消費(fèi)的金額,共購(gòu)買(mǎi)的商品總數(shù),購(gòu)買(mǎi)者的平均年齡等。 ExcuteXmlReader將CommandText發(fā)

43、送到Connection并生成一個(gè)XmlReader對(duì)象。ResetCommandTimeout將CommandTimeout屬性重置為默認(rèn)值257.1 ADO.NETSqlCommand常見(jiàn)構(gòu)造函數(shù)和方法(例8.3) SqlCommand構(gòu)造函數(shù)是初始化SqlCommand對(duì)象命令,它有4種方法重載。也就是有4種方法可以定義Command對(duì)象。 第一種:new SqlCommand()初始化CommandText的值和初始化Connection的值都為空 第二種 :new SqlCommand(string)用string字符串的內(nèi)容初始化CommandText的值,而Connection的

44、屬性值為空。 第三種:new SqlCommand(string cmd,SqlConnection conn)用cmd初始化CommandText的值,用conn初始化Connection的屬性值。 第四種:new SqlCommand(string cmd,SqlConnection conn,Transaction)用cmd初始化CommandText的值,用conn初始化Connection的屬性值,用Transaction初始化Transaction的屬性值。267.1 ADO.NET 比較如下的三種代碼,可以看出它們執(zhí)行的功能都是相同的。String mycmd=”SELECT*

45、FROM goods”;String myconn=”integrated security=SSPI;datasource=(local);initialcatalog=SPXS”;/方法一:SqlCommand sqlcmd=new SqlCommand()SqlConnection sqlconn=new SqlConnection(myconn);Sqlcmd.CommandText=mycmd;sqlcmd.Connection=sqlconn;/方法二:SqlCommand sqlcmd=new SqlCommand(mycmd);SqlConnection sqlconn=new

46、 SqlConnection(myconn);Sqlcmd.Connection=sqlconn;/方法三:SqlCommand sqlcmd=new SqlCommand(mycmd,new SqlConnection(myconn);/方法四:SqlCommand sqlcmd=new SqlCommand(mycmd,new SqlConnection(myconn),new SqlTransaction transaction);277.1 ADO.NET結(jié)構(gòu)化查詢(xún)語(yǔ)句SQL1、SELECT語(yǔ)法 SELECTDISTINCT別名.字段名或表達(dá)式AS 列標(biāo)題 FROM table_sou

47、rceWHERE search_conditionGROUP BY group_by_expressionORDER BY order_expressionASC/DESC2、INSERT INTO語(yǔ)法INSERT INTO 表名(字段列表)VALUES(字段值列表)3、DELETE語(yǔ)法DELETE FROM 表名WHERE刪除條件 4、UPDATE語(yǔ)法UPDATE 表名 SET 字段名1=新字段值,字段名1=新字段值WHERE 更新條件 287.1 ADO.NETSQL存儲(chǔ)過(guò)程定義存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,是利用SQL Server所提

48、供的Transact-SQL語(yǔ)言所編寫(xiě)的程序。功能是將常用或復(fù)雜的工作,預(yù)先用SQL語(yǔ)句寫(xiě)好并用一個(gè)指定名稱(chēng)存儲(chǔ)起來(lái), 以后需要數(shù)據(jù)庫(kù)提供與已定義好的存儲(chǔ)過(guò)程的功能相同的服務(wù)時(shí),只需調(diào)用execute,即可自動(dòng)完成命令。存儲(chǔ)過(guò)程是由流控制和SQL語(yǔ)句書(shū)寫(xiě)的過(guò)程,這個(gè)過(guò)程經(jīng)編譯和優(yōu)化后存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中,可由應(yīng)用程序通過(guò)一個(gè)調(diào)用來(lái)執(zhí)行,而且允許用戶(hù)聲明變量 。同時(shí),存儲(chǔ)過(guò)程可以接收和輸出參數(shù)、返回執(zhí)行存儲(chǔ)過(guò)程的狀態(tài)值,也可以嵌套調(diào)用。特點(diǎn)1.存儲(chǔ)過(guò)程只在創(chuàng)造時(shí)進(jìn)行編譯,以后每次執(zhí)行存儲(chǔ)過(guò)程都不需再重新編譯,而一般SQL語(yǔ)句每執(zhí)行一次就編譯一次,所以使用存儲(chǔ)過(guò)程可提高數(shù)據(jù)庫(kù)執(zhí)行速度。2.當(dāng)對(duì)數(shù)據(jù)

49、庫(kù)進(jìn)行復(fù)雜操作時(shí)(如對(duì)多個(gè)表進(jìn)行Update,Insert,Query,Delete時(shí)),可將此復(fù)雜操作用存儲(chǔ)過(guò)程封裝起來(lái)與數(shù)據(jù)庫(kù)提供的事務(wù)處理結(jié)合一起使用。 3.存儲(chǔ)過(guò)程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開(kāi)發(fā)人員的工作量 4.安全性高,可設(shè)定只有某些用戶(hù)才具有對(duì)指定存儲(chǔ)過(guò)程的使用權(quán)297.1 ADO.NET類(lèi)型 1.系統(tǒng)存儲(chǔ)過(guò)程:以sp_開(kāi)頭,用來(lái)進(jìn)行系統(tǒng)的各項(xiàng)設(shè)定.取得信息.相關(guān)管理工作。存儲(chǔ)在master 2.本地存儲(chǔ)過(guò)程:用戶(hù)創(chuàng)建的存儲(chǔ)過(guò)程是由用戶(hù)創(chuàng)建并完成某一特定功能的存儲(chǔ)過(guò)程,事實(shí)上一般所說(shuō)的存儲(chǔ)過(guò)程就是指本地存儲(chǔ)過(guò)程。存儲(chǔ)在用戶(hù)定義的數(shù)據(jù)庫(kù)中 3.臨時(shí)存儲(chǔ)過(guò)程:一是本地臨時(shí)存儲(chǔ)過(guò)程,以井

50、字號(hào)(#)作為其名稱(chēng)的第一個(gè)字符,則該存儲(chǔ)過(guò)程將成為一個(gè)存放在tempdb數(shù)據(jù)庫(kù)中的本地臨時(shí)存儲(chǔ)過(guò)程,且只有創(chuàng)建它的用戶(hù)才能執(zhí)行它; 二是全局臨時(shí)存儲(chǔ)過(guò)程,以?xún)蓚€(gè)井字號(hào)(#)號(hào)開(kāi)始,則該存儲(chǔ)過(guò)程將成為一個(gè)存儲(chǔ)在tempdb數(shù)據(jù)庫(kù)中的全局臨時(shí)存儲(chǔ)過(guò)程,全局臨時(shí)存儲(chǔ)過(guò)程一旦創(chuàng)建,以后連接到服務(wù)器的任意用戶(hù)都可以執(zhí)行它,而且不需要特定的權(quán)限。 4.遠(yuǎn)程存儲(chǔ)過(guò)程:在SQL Server2005中,遠(yuǎn)程存儲(chǔ)過(guò)程(Remote Stored Procedures)是位于遠(yuǎn)程服務(wù)器上的存儲(chǔ)過(guò)程,通??梢允褂梅植际讲樵?xún)和EXECUTE命令執(zhí)行一個(gè)遠(yuǎn)程存儲(chǔ)過(guò)程。 5.擴(kuò)展存儲(chǔ)過(guò)程:擴(kuò)展存儲(chǔ)過(guò)程(Extended

51、 Stored Procedures)是用戶(hù)可以使用外部程序語(yǔ)言編寫(xiě)的存儲(chǔ)過(guò)程,而且擴(kuò)展存儲(chǔ)過(guò)程的名稱(chēng)通常以xp_開(kāi)頭。存儲(chǔ)在master307.1 ADO.NET語(yǔ)法格式 1、創(chuàng)建存儲(chǔ)過(guò)程:CREATE PROCEDURE 所有者存儲(chǔ)過(guò)程名( IN | OUT | INOUT 參數(shù)名 數(shù)據(jù)類(lèi)型VARYING=內(nèi)定值 參數(shù)) AS SQL語(yǔ)句RETURN/IN 輸入?yún)?shù)表示該參數(shù)的值必須在調(diào)用存儲(chǔ)過(guò)程時(shí)指定,在存儲(chǔ)過(guò)程中修改該參數(shù)的值不能被返回,為默認(rèn)值;/OUT 輸出參數(shù)該值可在存儲(chǔ)過(guò)程內(nèi)部被改變,并可返回;/INOUT 輸入輸出參數(shù)調(diào)用時(shí)指定,并且可被改變和返回;/每個(gè)參數(shù)名前要有一個(gè)“”

52、符號(hào);/每一個(gè)存儲(chǔ)過(guò)程的參數(shù)僅為該程序內(nèi)部使用,參數(shù)的類(lèi)型除了IMAGE外,其他SQL erver所支持的數(shù)據(jù)類(lèi)型都可使用。 317.1 ADO.NET 2、執(zhí)行存儲(chǔ)過(guò)程: 3、修改存儲(chǔ)過(guò)程 4、刪除存儲(chǔ)過(guò)程EXEC 存儲(chǔ)過(guò)程名ALTER PROC 存儲(chǔ)過(guò)程名( 參數(shù)1 參數(shù)n)AS SQL語(yǔ)句RETURNDROP PROCEDURE 存儲(chǔ)過(guò)程名327.1 ADO.NETDataReader對(duì)象 數(shù)據(jù)庫(kù)中的數(shù)據(jù)。一種是使用DataReader逐行地從數(shù)據(jù)源獲得數(shù)據(jù)放進(jìn)緩沖區(qū)并進(jìn)行處理;二是使用DataSet對(duì)象來(lái)將數(shù)據(jù)放到內(nèi)存中進(jìn)行處理 數(shù)據(jù)讀取器DataReader對(duì)象是一個(gè)簡(jiǎn)單的數(shù)據(jù)集,用

53、于從數(shù)據(jù)源中檢索只讀、只進(jìn)的數(shù)據(jù)流。注意:1.要?jiǎng)?chuàng)建DataReader對(duì)象,必須調(diào)用對(duì)象Command的ExecuteReader()方法2.DataReader只能讀取數(shù)據(jù),沒(méi)有提供創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)記錄的功能3.DataReader是一種只進(jìn)的讀取數(shù)據(jù)方式,不能回頭讀取上一條記錄4.DataReader不能在IIS的內(nèi)容中保持?jǐn)?shù)據(jù),而是把數(shù)據(jù)傳遞到顯示位置5.當(dāng)使用Command對(duì)象的ExecuteReader方法時(shí),返回的就是DataReader類(lèi)型,查詢(xún)結(jié)果在查詢(xún)執(zhí)行時(shí)返回,并存儲(chǔ)在客戶(hù)端的網(wǎng)絡(luò)緩沖區(qū)中,直到使用DataReader的Read方法對(duì)它們發(fā)出請(qǐng)求。這種方法一次只在內(nèi)

54、存中存儲(chǔ)一行,從而降低了系統(tǒng)開(kāi)銷(xiāo)。6. DataReader和數(shù)據(jù)源類(lèi)型緊密連接,所以它對(duì)應(yīng)也有兩種類(lèi)型OleDbDataReader類(lèi)和SqlDataReader類(lèi)。 337.1 ADO.NETSqlDataReader主要屬性和方法 347.1 ADO.NETSqlDataReader的應(yīng)用(例8.4) 定義一個(gè)SqlDataReader對(duì)象Protected System.Data.Sqlclient.SqlDataReader sqlDataReader1 創(chuàng)建SqlCommand對(duì)象實(shí)例后,可以調(diào)用Command.ExecuteReader方法從數(shù)據(jù)源中檢索行,然后把值賦給sqlDa

55、taReader1。sqlDataReader1=sqlCommand1.ExecuteReader(); 隨后調(diào)用sqlDataReader1的Read方法從查詢(xún)的結(jié)果中獲取行。Read方法返回一個(gè)布爾值,可以通過(guò)這個(gè)值判斷是否是結(jié)果集的最后一條記錄。通常需要while語(yǔ)句來(lái)循環(huán)讀取?;灸J绞牵?While (sqlDataReader1.Read() . 357.1 ADO.NETDataAdapter 對(duì)象 DataAdapter對(duì)象可以用于檢索和更新數(shù)據(jù)庫(kù),或從數(shù)據(jù)源中獲取數(shù)據(jù),填充DataSet對(duì)象中的表,以及對(duì)DataSet對(duì)象進(jìn)行更改,提交回?cái)?shù)據(jù)源,該對(duì)象是DataSet對(duì)象和

56、實(shí)際數(shù)據(jù)源之間的橋梁 DataAdapter對(duì)象是可配置的,允許用戶(hù)指定將哪些數(shù)據(jù)移入或移除數(shù)據(jù)集,經(jīng)常采取的形式是對(duì)SQL語(yǔ)句或存儲(chǔ)過(guò)程進(jìn)行調(diào)用,這些語(yǔ)句或存儲(chǔ)過(guò)程被調(diào)用時(shí)即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)DataAdapter和DataReader的區(qū)別 DataReader對(duì)象是通過(guò)打開(kāi)一個(gè)連接來(lái)檢索數(shù)據(jù)庫(kù)的信息,然后執(zhí)行SQL命令,再搜索要檢索的記錄,當(dāng)不再有操作時(shí)關(guān)閉連接 DataAdapter對(duì)象僅僅在需要填充DataSet對(duì)象時(shí)才使用數(shù)據(jù)庫(kù)連接,在完成操作后將釋放所有服務(wù)器資源DataAdapter對(duì)象的工作步驟一般有兩種: 通過(guò)Command對(duì)象執(zhí)行SQL語(yǔ)句從數(shù)據(jù)源中檢索數(shù)據(jù),將獲取的結(jié)

57、果填充的DataSet對(duì)象的表中 把用戶(hù)對(duì)DataSet對(duì)象做出的更改寫(xiě)到數(shù)據(jù)源中367.1 ADO.NETSqlDataAdapter 屬性和方法(例8.5) InertCommand獲取或設(shè)置一個(gè)SQL語(yǔ)句或存儲(chǔ)過(guò)程,以便在數(shù)據(jù)源中插入新記錄SelectCommand獲取或設(shè)置一個(gè)SQL語(yǔ)句或存儲(chǔ)過(guò)程,用于在數(shù)據(jù)源中選擇記錄UpdateCommand獲取或設(shè)置一個(gè)SQL語(yǔ)句或存儲(chǔ)過(guò)程,用于在數(shù)據(jù)源中更新新記錄DleteCommand獲取或設(shè)置一個(gè)SQL語(yǔ)句或存儲(chǔ)過(guò)程,以便在數(shù)據(jù)源中刪除記錄Fill在DataSet中添加或刷新行以匹配數(shù)據(jù)源中的行Update為DataSet中每個(gè)已插入、已更

58、新或已刪除的行調(diào)用相應(yīng)的Inset、Update或Delete語(yǔ)句377.1 ADO.NETSqlDataAdapter填充DataSet的過(guò)程(Fill) 通過(guò)DataAdapter的SelectCommand屬性從數(shù)據(jù)庫(kù)中檢索出需要的數(shù)據(jù)。(SelectCommand其實(shí)是一個(gè)Command對(duì)象。) 通過(guò)DataAdapter的Fill方法把檢索來(lái)的數(shù)據(jù)填充 DataSet。 SqlConnection sqlConnection1 = new SqlConnection ( Data Source=localhost ;Integrated Security=SSPI ;Initial

59、Catalog=Northwind ) ;/創(chuàng)建數(shù)據(jù)連接SqlCommand selectCMD = new SqlCommand ( SELECT CustomerID , CompanyName FROM Customers , sqlConnection1 ) ;/創(chuàng)建并初始化SqlCommand對(duì)象SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter ( ) ;custDA.SelectCommand = selectCMD ;sqlConnection.Open ( ) ;/創(chuàng)建SqlDataAdapter對(duì)象,并根據(jù)SelectCo

60、mmand屬性檢索數(shù)據(jù)DataSet dsDataSet1 = new DataSet ( ) ;sqlDataAdapter1.Fill ( dsDataSet1 , Customers ) ;/使用SqlDataAdapter的Fill方法填充DataSetsqlConnection.Close ( ) ;/關(guān)閉數(shù)據(jù)連接387.1 ADO.NETFill方法的多種重載Fill(Data Table) 填充一個(gè)表,參數(shù)為被填充表的名稱(chēng)Fill(DataSet)填充一個(gè)DataSet對(duì)象,參數(shù)為被填充對(duì)象的名稱(chēng)Fill(DataSet,string)填充 一個(gè)DataSet對(duì)象,參數(shù)用于映射的

溫馨提示

  • 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)論