版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
-1-理解ADO.NET的結(jié)構(gòu)原理掌握ADO.NET訪問數(shù)據(jù)庫的常用對(duì)象掌握使用Connection對(duì)象連接SQLServer2008數(shù)據(jù)庫掌握使用Command對(duì)象訪問數(shù)據(jù)庫掌握使用DataAdapter和DataSet操作數(shù)據(jù)庫目標(biāo)-2-ADO.NET簡介-1ADO.NET技術(shù),是一種可以快速、高效地利用VisualStudio2010開發(fā)出基于.NET平臺(tái)的數(shù)據(jù)庫應(yīng)用程序的技術(shù)。實(shí)際上,ADO.NET就是由.NETFramework提供的與數(shù)據(jù)庫操作相關(guān)的類庫。ADO.NET可以被看作是一個(gè)介于數(shù)據(jù)源和數(shù)據(jù)使用者之間的轉(zhuǎn)換器。ADO.NET接受程序中的命令,如連接數(shù)據(jù)庫、返回?cái)?shù)據(jù)集等,然后將這些命令轉(zhuǎn)換成在數(shù)據(jù)源中可以正確執(zhí)行的語句(如關(guān)系數(shù)據(jù)庫的SQL)。-3-ADO.NET簡介-2ADO.NET的幾個(gè)特征:非連接數(shù)據(jù)體系:ADO.NET可以在兩種模式下工作,一種是連接模式,另一種是非連接模式。在數(shù)據(jù)集中緩存數(shù)據(jù):數(shù)據(jù)集是數(shù)據(jù)庫記錄的一個(gè)緩沖集合,數(shù)據(jù)集獨(dú)立于數(shù)據(jù)源,可以保持同數(shù)據(jù)源的無連接狀態(tài)。用XML進(jìn)行數(shù)據(jù)傳送:通過使用XML將數(shù)據(jù)從數(shù)據(jù)庫中傳送到數(shù)據(jù)集中,再從數(shù)據(jù)集傳送到另外一個(gè)對(duì)象中。使用XML可以在不同類型應(yīng)用之間交換信息。通過數(shù)據(jù)命令和數(shù)據(jù)庫相互作用:數(shù)據(jù)命令可以是SQL聲明或一個(gè)存儲(chǔ)過程,通過執(zhí)行命令,可以從數(shù)據(jù)庫中檢索、插入或修改數(shù)據(jù)。
-4-ADO.NET結(jié)構(gòu)-1ADO.NET包括兩個(gè)核心組件:NETFramework數(shù)據(jù)提供程序和DataSet,用于實(shí)現(xiàn)數(shù)據(jù)操作與數(shù)據(jù)訪問的分離。-5-ADO.NET結(jié)構(gòu)-2.NETFramework數(shù)據(jù)提供程序NETFramework數(shù)據(jù)提供程序是ADO.NET一個(gè)核心組件,用于實(shí)現(xiàn)數(shù)據(jù)操作和對(duì)數(shù)據(jù)的快速、只進(jìn)、只讀訪問。.NETFramework數(shù)據(jù)提供程序由Connection、Command、DataReader和DataAdapter等四個(gè)核心對(duì)象組成,主要用于連接到數(shù)據(jù)庫、執(zhí)行命令和檢索結(jié)果,開發(fā)人員可以直接處理檢索到的結(jié)果,或?qū)⑵浞湃隓ataSet對(duì)象,以便與來自多個(gè)數(shù)據(jù)源的數(shù)據(jù)或在層之間進(jìn)行遠(yuǎn)程處理的數(shù)據(jù)組合在一起,以特殊方式向用戶公開。-6-ADO.NET結(jié)構(gòu)-3.NETFramework數(shù)據(jù)提供程序的核心對(duì)象的作用對(duì)象名稱對(duì)象功能Connection提供與數(shù)據(jù)源的連接,是數(shù)據(jù)訪問者和數(shù)據(jù)源之間的對(duì)話通道Command能夠使用訪問用于返回?cái)?shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲(chǔ)過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令DataReader從數(shù)據(jù)源中獲得高性能的數(shù)據(jù)流,允許應(yīng)用程序在數(shù)據(jù)記錄間進(jìn)行只讀的、只進(jìn)的數(shù)據(jù)訪問,從而提高應(yīng)用程序的性能DataAdapter充當(dāng)DataSet對(duì)象和數(shù)據(jù)源之間的橋梁,DataAdapter使用Command對(duì)象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet中,DataAdapter對(duì)DataSet對(duì)象隱藏了實(shí)際數(shù)據(jù)操作的細(xì)節(jié),并使DataSet中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致,從而保證DataSet的數(shù)據(jù)源無關(guān)性。-7-ADO.NET結(jié)構(gòu)-4DataSet組件DataSet是ADO.NET的斷開連接式結(jié)構(gòu)的核心組件,其設(shè)計(jì)目的是為了實(shí)現(xiàn)獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪問。DataSet與數(shù)據(jù)源是斷線連接的,可以將其看成是從數(shù)據(jù)庫中所檢索出的數(shù)據(jù)在內(nèi)存中的緩存。DataSet是DataTable對(duì)象的集合,由數(shù)據(jù)行、數(shù)據(jù)列、主鍵、外鍵、約束等信息組成。因此DataTable可以看成是對(duì)應(yīng)于數(shù)據(jù)庫中表的概念。-8-ADO.NET結(jié)構(gòu)-5DataSet數(shù)據(jù)訪問原理應(yīng)用程序即可以通過數(shù)據(jù)集,也可以通過DataReader來訪問數(shù)據(jù)庫,其數(shù)據(jù)訪問原理如下圖所示。-9-ADO.NET結(jié)構(gòu)-6ADO.NET中的命名空間命名空間(NameSpace)記錄了對(duì)象的名稱與所在的路徑。使用ADO.NET中的對(duì)象時(shí),必須首先聲明命名空間,這樣編譯器才知道到哪里去加載這些對(duì)象。ADO.NET的命名空間分類如下所示:System.Data命名空間:該命名空間是ADO.NET的核心,包含大部分的基礎(chǔ)對(duì)象,如DataSet、DataTable、DataRow等,因此在編寫ADO.NET程序時(shí),必須引用此命名空間。System.Data.Common命名空間:該命名空間的核心內(nèi)容是各種.NETFramework數(shù)據(jù)提供程序共享的類。System.Data.OleDb命名空間:該命名空間包含了使用數(shù)據(jù)提供程序在應(yīng)用程序和數(shù)據(jù)庫之間發(fā)送和接受數(shù)據(jù)的組件,當(dāng)連接SQLServer6.5以下版本或其他數(shù)據(jù)庫時(shí),必須首先引用此命名空間。System.Data.SqlClient命名空間:該命名空間中的內(nèi)容是專為SQLServer數(shù)據(jù)庫設(shè)計(jì)的數(shù)據(jù)提供程序。雖然System.Data.OleDb中的類也可以用于SQLServer數(shù)據(jù)庫,但相比較而言,SqlClient中的類具有更好的性能。System.Data.OracleClient命名空間:該命名空間的核心內(nèi)容是專為Oracle數(shù)據(jù)庫設(shè)計(jì)的數(shù)據(jù)提供程序。-10-ADO.NET結(jié)構(gòu)-7ADO.NET中命名空間的結(jié)構(gòu)圖-11-ADO.NET的核心對(duì)象ADO.NET提供了一些核心對(duì)象來,這些核心對(duì)象能夠自行封裝數(shù)據(jù)庫操作類并簡化開發(fā)過程。ADO.NET主要包括以下五個(gè)核心對(duì)象:Connection
:連接對(duì)象Command
:命令對(duì)象DataReader
:數(shù)據(jù)讀取器DataAdapter
:數(shù)據(jù)適配器DataSet
:數(shù)據(jù)集-12-Connection對(duì)象-1Connection對(duì)象要使用ADO.NET檢索和操作數(shù)據(jù)庫,必須首先創(chuàng)建應(yīng)用程序和數(shù)據(jù)庫之間的連接。ADO.NET提供了以下幾個(gè)專門用于連接不同數(shù)據(jù)庫的連接類:OleDbConnection類:主要用于連接Access、SQLServer6.5以下版本的數(shù)據(jù)庫。OdbcConnection類:用于連接ODBC數(shù)據(jù)源。SqlConnection類:用于連接SQLServer數(shù)據(jù)庫。OracleConnecton類:用于連接Oracle數(shù)據(jù)庫。
-13-Connection對(duì)象-2ADO.NET連接數(shù)據(jù)庫的步驟:1.添加對(duì)System.Data.SqlClient的引用后臺(tái)代碼中需要對(duì)命名空間System.Data.SqlClient進(jìn)行引用,代碼如下所示。usingSystem.Data.SqlClient;
2.創(chuàng)建SqlConnection對(duì)象在程序代碼中創(chuàng)建SqlConnection對(duì)象,并賦值連接字符串,代碼如下所示。SqlConnectioncon=newSqlConnection();//創(chuàng)建連接對(duì)象//設(shè)置連接字串con.ConnectionString="server=.;database=mydb;uid=sa;pwd=mypassword";表示SqlServer服務(wù)器的IP表示數(shù)據(jù)庫名表示數(shù)據(jù)庫名用戶名和密碼-14-Connection對(duì)象-33.打開數(shù)據(jù)庫連接配置完連接字符串后,就可以調(diào)用SqlConnection對(duì)象的Open()方法來打開數(shù)據(jù)庫連接。代碼如下所示。con.Open();
在應(yīng)用程序幾乎所有的頁面或模塊中都需要連接數(shù)據(jù)庫,因此也就都需要使用連接字符串,所以通常會(huì)將連接字符串寫到配置文件中,使用時(shí)通過.NET提供的配置管理類來讀取,在需要修改的話只需要修改該配置文件一處即可,從而簡化了開發(fā)的繁瑣程度。打開Web網(wǎng)站的配置文件web.config,查找<connectionStrings>標(biāo)簽,在其中添加如下內(nèi)容。<connectionStrings> <addname="conn" connectionString="server=.;database=mydb;uid=sa;pwd=mypassword"/></connectionStrings>-15-Connection對(duì)象-43.關(guān)閉數(shù)據(jù)庫連接當(dāng)對(duì)數(shù)據(jù)進(jìn)行完操作后,在代碼結(jié)束時(shí)需要關(guān)閉數(shù)據(jù)庫連接,通過Close()方法即可將其關(guān)閉,代碼如下所示。con.Close();-16-Connection對(duì)象-5示例:使用ADO.NET連接SQLServer2005數(shù)據(jù)庫。創(chuàng)建頁面SqlConnectionDemo.aspx,包含一個(gè)ID為“Label1”的Label控件。publicpartialclassSqlConnectionDemo:System.Web.UI.Page{ publicstaticreadonlystringCONN_STR= ConfigurationManager. ConnectionStrings["conn"].ConnectionString; protectedvoidPage_Load(objectsender,EventArgse) { try { SqlConnectionconn=newSqlConnection(CONN_STR); conn.Open();//打開連接
Label1.Text="連接成功"; conn.Close();//關(guān)閉連接
} catch { Label1.Text="連接失敗"; } }}-17-Command對(duì)象-1Command對(duì)象可以使用數(shù)據(jù)命令直接與數(shù)據(jù)源進(jìn)行通信。Command類是一個(gè)執(zhí)行SQL語句和存儲(chǔ)過程的類,通過它,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)的添加、刪除、更新、查詢等操作。Command常用的屬性如下:屬性功能說明Connection用于設(shè)置命令對(duì)象所使用的連接CommandText被執(zhí)行的命令內(nèi)容CommandType指名CommandText屬性的類型,可以是Sql語句、存儲(chǔ)過程或表Parameters命令對(duì)象的參數(shù)集合CommandType具有3種不同的類型:類型功能說明CommandType.TextCommandType的默認(rèn)值。它指示執(zhí)行的是SQL語句,為CommandText指定SQL字符串CommandType.StoredProcedure指示執(zhí)行的是存儲(chǔ)過程,需要為CommandText指定一個(gè)存儲(chǔ)過程的名稱CommandType.TableDirect指示執(zhí)行的是得到某個(gè)數(shù)據(jù)表中的所有數(shù)據(jù),此時(shí)需要為CommandText指定一個(gè)數(shù)據(jù)表名稱-18-Command對(duì)象-2Command對(duì)象提供了三種用于執(zhí)行SQL語句的方法:ExecuteReader():用于執(zhí)行SELECT命令,并返回一個(gè)DataReader對(duì)象,使用DataReader可以以只讀方式訪問查詢結(jié)果。ExecuteNonQuery():用于執(zhí)行非SELECT的命令,如INSERT、DELETE或者UPDATE命令,返回一個(gè)命令所影響的數(shù)據(jù)的行數(shù)。也可以用ExecuteNonQuery()方法來執(zhí)行一些數(shù)據(jù)定義命令,如新建、更新、刪除數(shù)據(jù)庫對(duì)象(如表、索引等)。ExecuteScalar():用于執(zhí)行SELECT查詢命令,返回?cái)?shù)據(jù)中第一行第一列的值。這個(gè)方法通常用來執(zhí)行那些用到COUNT()或者SUM()函數(shù)的SELECT命令。-19-Command對(duì)象-3示例:演示ExecuteNonQuery()的使用方法。publicpartialclassExecuteNonQueryDemo:System.Web.UI.Page{ publicstaticreadonlystringCONN_STR =ConfigurationManager.ConnectionStrings["conn"] .ConnectionString; protectedvoidPage_Load(objectsender,EventArgse) { using(SqlConnectionconn=newSqlConnection(CONN_STR)) { Stringsql="UPDATEusersSETusername='姓名'"; conn.Open(); SqlCommandcommand=newSqlCommand(sql,conn); Response.Write("操作影響了"+command.ExecuteNonQuery() +"條記錄"); } }}-20-Command對(duì)象-4示例:演示ExecuteScalar()的使用方法。publicpartialclassExecuteScalarDemo:System.Web.UI.Page{ publicstaticreadonlystringCONN_STR =ConfigurationManager.ConnectionStrings["conn"].ConnectionString; protectedvoidPage_Load(objectsender,EventArgse) { using(SqlConnectionconn=newSqlConnection(CONN_STR)) { Stringsql="SELECTCOUNT(*)FROMusers"; conn.Open(); SqlCommandcommand=newSqlCommand(sql,conn); Label1.Text="users表中有"+command.ExecuteScalar()+"條記錄"; } }}-21-DataReader對(duì)象-1DataReader類被設(shè)計(jì)為產(chǎn)生只讀,只進(jìn)的數(shù)據(jù)流。與DataSet相比,使用DataReader訪問數(shù)據(jù)庫的速度要快一些,并且能夠使用較少的服務(wù)器資源。DataReader具有如下特點(diǎn):快速的數(shù)據(jù)庫訪問只進(jìn)和只讀減少服務(wù)器資源自定義數(shù)據(jù)庫管理手動(dòng)連接管理
-22-DataReader對(duì)象-2DataReader對(duì)象的常用方法方法返回值功能說明Close()void關(guān)閉數(shù)據(jù)讀取器。已重載NextResult()boolean當(dāng)讀取批量的SQL語句的結(jié)果時(shí),前進(jìn)到下一個(gè)結(jié)果集,如果有更多的結(jié)果集,將返回True。有重載Read()boolean前進(jìn)到下一條記錄。如果有記錄,將返回True-23-DataReader對(duì)象-3示例:演示使用Command和DataReader訪問數(shù)據(jù)庫,實(shí)現(xiàn)登錄功能。publicpartialclassLogin:System.Web.UI.Page{ publicstaticreadonlystringConStrUrl= ConfigurationManager.ConnectionStrings["conn"].ConnectionString; protectedvoidbtnLogin_Click(objectsender,EventArgse) { SqlConnectionconn=newSqlConnection(ConStrUrl);//創(chuàng)建連接對(duì)象
try { conn.Open();//嘗試打開連接
stringusername=tbUserName.Text.Trim(); stringpassword=tbPassword.Text.Trim(); stringsql="select*from[users]whereusername='"+username+"'"; SqlCommandcmd=newSqlCommand(sql,conn);//創(chuàng)建Command對(duì)象
SqlDataReaderdr=cmd.ExecuteReader();//創(chuàng)建DataReader對(duì)象
if(dr.HasRows) { … } catch { Response.Write("登錄失?。簲?shù)據(jù)庫連接失敗!<hr/>"); } }}-24-DataAdapter對(duì)象DataAdapter是DataSet和數(shù)據(jù)源之間的一個(gè)適配器。在創(chuàng)建數(shù)據(jù)庫連接后,可以使用DataAdapter對(duì)象對(duì)數(shù)據(jù)集DataSet進(jìn)行填充。DataSet對(duì)象中緩存了檢索結(jié)果,從而降低了應(yīng)用程序和數(shù)據(jù)庫之間的通信次數(shù)DataAdapter常用的屬性和方法如下:屬性或方法功能說明SelectCommand屬性查詢數(shù)據(jù)的命令I(lǐng)nsertCommand屬性插入數(shù)據(jù)的命令UpdateCommand屬性更新數(shù)據(jù)的命令DeleteCommand屬性刪除數(shù)據(jù)的命令Fill()方法用于填充或刷新DataSetUpdate()方法將DataSet中的數(shù)據(jù)更新到數(shù)據(jù)庫里-25-DataSet對(duì)象DataSet是一個(gè)數(shù)據(jù)容器,將數(shù)據(jù)庫中的數(shù)據(jù)拷貝一份放到了用戶本地的內(nèi)存中,供用戶在不連接數(shù)據(jù)庫的情況下讀取數(shù)據(jù),不僅充分利用了客戶端資源,也大大降低了數(shù)據(jù)庫服務(wù)器的壓力。DataSet能夠支持多表、表間關(guān)系、數(shù)據(jù)庫約束等,與關(guān)系數(shù)據(jù)庫的模型基本一致,從而能模擬出一個(gè)簡單的數(shù)據(jù)庫模型。-26-DataTable-1DataTable是DataSet中的常用的對(duì)象,是數(shù)據(jù)庫中表概念的映射。DataTable屬性如下表所示。屬性功能說明CaseSensitive此屬性設(shè)置表中的字符串是否區(qū)分大小寫,若無特殊情況,一般設(shè)置為false,該屬性對(duì)于查找,排序,過濾等操作有很大的影響Columns獲取屬于該表的列的集合MinimumCapacity設(shè)置創(chuàng)建數(shù)據(jù)表的最小記錄空間Rows獲取屬于改表的行的集合TableName指定數(shù)據(jù)表的名稱-27-DataTable-2示例:通過編程的方式創(chuàng)建一個(gè)DataTable表。DataTabletable=newDataTable("mytable");//創(chuàng)建一個(gè)DataTable對(duì)象table.CaseSensitive=false;//設(shè)置不區(qū)分大小寫table.MinimumCapacity=100;//設(shè)置DataTable初始大小table.TableName="newtable";//設(shè)置DataTable的名稱DataTable必須包含列。因此創(chuàng)建一個(gè)DataTable后,必須向其增加列。開發(fā)人員可以使用Columns集合的Add()方法向DataTable中增加列,代碼如下所示。DataColumncolum=newDataColumn();//創(chuàng)建一個(gè)DataColumncolum.ColumName="id";//設(shè)置列名colum.DataType=typeof(int);//設(shè)置列的數(shù)據(jù)類型table.Columns.Add(colum);//增加一列colum=newDataColumn();//再創(chuàng)建一個(gè)DataColumncolum.ColumName="title";colum.DataType=typeof(string);table.Columns.Add(colum);注意:DataTable中列的數(shù)據(jù)類型使用的只能是.NET中的數(shù)據(jù)類型-28-DataRowDataRow表示是表中的數(shù)據(jù)行??梢允褂肈ataRow對(duì)象向表中添加新的數(shù)據(jù)行,這一操作同數(shù)據(jù)庫中的INSERT語句的概念類似。插入一個(gè)新行,首先要聲明一個(gè)DataRow類型的變量。例如:DataRowrow=table.NewRow(); //使用DataTable的NewRow方法創(chuàng)建一個(gè)新DataRow對(duì)象
通過使用索引或者列名來操作行中的字段。例如:row[0]=1; //使用索引賦值列row[1]="datarow"; //使用索引賦值列
-29-DataAdapter和DateSet示例:演示使用DataAdapter和DateSet訪問數(shù)據(jù)。… con.Open(); //打開連接
SqlDataAdapterdaDept=newSq
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 22765:2025 EN Nuclear fuel technology - Sintered (U,Pu)O2 pellets - Guidance for ceramographic preparation for microstructure examination
- 紋身配樂課程設(shè)計(jì)
- 自動(dòng)裝料系統(tǒng)plc課程設(shè)計(jì)
- 藝術(shù)課體驗(yàn)課課程設(shè)計(jì)
- 大地測(cè)量GPS課程設(shè)計(jì)
- 《刮痧西學(xué)中》課件
- 九年級(jí)歷史下冊(cè)期末綜合檢測(cè)課件
- 制造企業(yè)員工手冊(cè)
- 數(shù)據(jù)化課程設(shè)計(jì)
- 流水燈課程設(shè)計(jì)概述
- 初中數(shù)學(xué)新課程標(biāo)準(zhǔn)(2024年版)
- 期末測(cè)試卷(一)2024-2025學(xué)年 人教版PEP英語五年級(jí)上冊(cè)(含答案含聽力原文無聽力音頻)
- 2023-2024學(xué)年廣東省深圳市南山區(qū)八年級(jí)(上)期末英語試卷
- 中華傳統(tǒng)文化之戲曲瑰寶學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 廣東省中山市2023-2024學(xué)年四年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 機(jī)制砂檢測(cè)報(bào)告
- 省教育廳檢查組接待方案
- 跌落測(cè)試(中文版)ISTA2A2006
- 氣動(dòng)潛孔錘施工方案
- 云南省教育科學(xué)規(guī)劃課題開題報(bào)告 - 云南省教育科學(xué)研究院
- 人民法院涉訴信訪案件終結(jié)辦法
評(píng)論
0/150
提交評(píng)論