版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章ADO.NET數(shù)據(jù)訪(fǎng)問(wèn)2023年1月4日12023年1月4日2了解ADO.NET的基本知識(shí)掌握ADO.NET與數(shù)據(jù)庫(kù)的連接方法掌握利用Command訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的方法掌握利用DataAdapter訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的方法什么是ADO.NET?2023年1月4日4.NETFramework數(shù)據(jù)提供程序包含以下四個(gè)核心類(lèi)Connection:建立與數(shù)據(jù)源的連接。Command:對(duì)數(shù)據(jù)源執(zhí)行操作命令,用于修改數(shù)據(jù)、查詢(xún)數(shù)據(jù)和運(yùn)行存儲(chǔ)過(guò)程等。DataReader:從數(shù)據(jù)源獲取返回的數(shù)據(jù)。DataAdapter:用數(shù)據(jù)源數(shù)據(jù)填充DataSet,并可以處理數(shù)據(jù)更新。2023年1月4日5ASP.NET數(shù)據(jù)訪(fǎng)問(wèn)程序的開(kāi)發(fā)流程有以下幾個(gè)步驟:利用Connection對(duì)象創(chuàng)建數(shù)據(jù)連接。利用Command對(duì)象數(shù)據(jù)源執(zhí)行SQL命令。利用DataReader對(duì)象讀取數(shù)據(jù)源的數(shù)據(jù)。DataSet對(duì)象與DataAdapter對(duì)象配合,完成數(shù)據(jù)的查詢(xún)和更新操作。2023年1月4日6連接數(shù)據(jù)源有四種接口:名稱(chēng)空間對(duì)應(yīng)的類(lèi)名稱(chēng)System.Data.SqlClient
SqlConnection;SqlCommand;SqlDataReader;SqlDataAdapterSystem.Data.Odbc
OdbcConnection;OdbcCommand;OdbcDataReader;OdbcDataAdapterSystem.Data.OleDb
OleDbConnection;OleDbCommand;OleDbDataReader;OleDbDataAdapterSystem.Data.OracleClient
OracleConnection;OracleCommand;OracleDataReader;OracleDataAdapter2023年1月4日77.2使用Connection連接數(shù)據(jù)庫(kù)在建立數(shù)據(jù)庫(kù)連接之前,首先在Web.Config配置文件中建立一個(gè)連接字符串,然后建立數(shù)據(jù)庫(kù)連接。普通數(shù)據(jù)庫(kù)連接web.config<addname="SiteDBConnection"connectionString="DataSource=(local);database=xyz;uid=aaa;pwd=123"providerName="System.Data.sqlClient"/>2023年1月4日8默認(rèn)的連接SQLServer數(shù)據(jù)庫(kù)配置<connectionStrings><addname=“ConnectionString”connectionString=“DataSource=.\SQLEXPRESS;AttachDbFilename=|Datadirectory|\mydatabase.mdf;IntegratedSecurity=True;UserInstance=True”/></connectionStrings>這是SqlconnectionStringBuilder實(shí)例化時(shí)需要使用connectionString.1)SqlconnectionStringBuilder的DataSource屬性2)IntegratedSecurity屬性,true時(shí)候,可使用當(dāng)前windows用戶(hù)身份驗(yàn)證,為False時(shí)候,需要在連接中指定用戶(hù)ID和密碼。3)AttachDbFilename屬性,指定連接打開(kāi)的時(shí)候動(dòng)態(tài)附加到服務(wù)器上的數(shù)據(jù)庫(kù)文件的位置。這個(gè)屬性可以接受數(shù)據(jù)庫(kù)的完整路徑和相對(duì)路徑,|Datadirectory|在運(yùn)行時(shí)這個(gè)路徑會(huì)被應(yīng)用程序的App_Data目錄所代替4)UserInstance屬性,指示是否連接從默認(rèn)的SQLServer實(shí)例重定向到在調(diào)用方賬號(hào)下運(yùn)行并且在運(yùn)行時(shí)啟動(dòng)實(shí)例。True時(shí)候,SQLServerExpress為了把數(shù)據(jù)庫(kù)附加到新的實(shí)例,建立一個(gè)新的進(jìn)程,在打開(kāi)連接的用戶(hù)身份下運(yùn)行。2023年1月4日9數(shù)據(jù)庫(kù)連接對(duì)象Connection
Connection對(duì)象是為數(shù)據(jù)存儲(chǔ)提供連接的對(duì)象,除了存儲(chǔ)連接以外,還提供其他功能,例如數(shù)據(jù)存儲(chǔ)的類(lèi)型,及其支持的特性,也可以利用Connection對(duì)象運(yùn)行命令。2023年1月4日10數(shù)據(jù)庫(kù)連接通常指的是應(yīng)用程序和數(shù)據(jù)庫(kù)的連接。當(dāng)與數(shù)據(jù)庫(kù)交互時(shí),首先應(yīng)該創(chuàng)建連接,這將會(huì)告訴ADO.NET代碼,將與哪一個(gè)數(shù)據(jù)庫(kù)打交道。這種方式使與數(shù)據(jù)庫(kù)連接變得十分簡(jiǎn)單,需要寫(xiě)得代碼只是實(shí)體化Connection對(duì)象,打開(kāi)Connection,在執(zhí)行完之后關(guān)閉Connection。因?yàn)锳DO.NET以這種方式構(gòu)造其他的類(lèi),甚至有時(shí)候不需要做太多的工作。2023年1月4日11盡管在A(yíng)DO.NET中,要連接數(shù)據(jù)庫(kù)是很簡(jiǎn)單的一件事,但是要正確的使用好它也不是一件容易的事,例如:在打開(kāi)連接對(duì)象后,必須記得將它關(guān)閉,否則會(huì)浪費(fèi)系統(tǒng)的資源。當(dāng)然,如果只是在一臺(tái)計(jì)算上有一個(gè)單獨(dú)的應(yīng)用程序使用單獨(dú)的數(shù)據(jù)庫(kù),可能就不用關(guān)心這個(gè)問(wèn)題。如果是一個(gè)企業(yè)級(jí)應(yīng)用程序中,整個(gè)機(jī)構(gòu)的所有信息都存放在數(shù)據(jù)庫(kù)中,每天又有很多人在連接這些數(shù)據(jù),每一次連接都會(huì)損耗系統(tǒng)的資源,這時(shí)就必須要掌握好數(shù)據(jù)庫(kù)連接對(duì)象了。提示:在門(mén)戶(hù)網(wǎng)站、搜索引擎中。應(yīng)用程序保持連接而不讓它們斷開(kāi)會(huì)對(duì)性能帶來(lái)嚴(yán)重的負(fù)面影響,在進(jìn)行這樣的程序設(shè)計(jì)時(shí),靈活掌握數(shù)據(jù)連接變得十分的重要。2023年1月4日12使用配置文件和Connection創(chuàng)建與數(shù)據(jù)庫(kù)的連接Web.config文件是ASP.NET應(yīng)用程序中得一個(gè)XML文本文件,它用來(lái)存儲(chǔ)Web應(yīng)用程序的配置信息。例如:字符編碼、數(shù)據(jù)連接字符串、會(huì)話(huà)過(guò)期時(shí)間、身份驗(yàn)證方式等等。他可以出現(xiàn)在應(yīng)用程序的每一個(gè)目錄中,不要以為只能有一個(gè)。在新建好一個(gè)ASP.NET的Web應(yīng)用程序以后,在默認(rèn)情況下,系統(tǒng)會(huì)再根目錄自動(dòng)創(chuàng)建一個(gè)默認(rèn)的Web.config文件,它包括默認(rèn)的配置設(shè)置,所有的子目錄都繼承它的配置設(shè)置。2023年1月4日13Command對(duì)象Command對(duì)象是用來(lái)執(zhí)行數(shù)據(jù)庫(kù)操作命令的,比如對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)表記錄的查詢(xún)、增加、修改或刪除等都是要通過(guò)Command對(duì)象來(lái)實(shí)現(xiàn)的。一個(gè)數(shù)據(jù)庫(kù)操作命令可以用SQL語(yǔ)句來(lái)表達(dá),包括SELECT語(yǔ)句、UPDATE語(yǔ)句、DELETE語(yǔ)句、INSERT語(yǔ)句等。Command對(duì)象可以傳遞參數(shù)并返回值,同時(shí)Command也可以調(diào)用數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程。2023年1月4日14數(shù)據(jù)庫(kù)命令執(zhí)行對(duì)象CommandCommand對(duì)象是特別為執(zhí)行各種類(lèi)型的SQL命令而設(shè)計(jì),它依賴(lài)于Connection對(duì)象,也是ASP.NET的重要組成部分。Command對(duì)象可以執(zhí)行兩種SQL命名:返回記錄集和不返回記錄集兩種類(lèi)型。Command對(duì)象又叫命令對(duì)象,主要用于執(zhí)行SQL命令,并且可以執(zhí)行所有的SQL命令,也實(shí)用于存儲(chǔ)過(guò)程。它常常和DataReader對(duì)象一起結(jié)合使用,它的Connention屬性用來(lái)設(shè)置所用到的連接對(duì)象。2023年1月4日15Command對(duì)象的屬性2023年1月4日16屬性說(shuō)明CommandType獲取或設(shè)置Command對(duì)象要執(zhí)行命令的類(lèi)型CommandText獲取或設(shè)置要對(duì)數(shù)據(jù)源執(zhí)行的SQL語(yǔ)句或存儲(chǔ)過(guò)程名或表名CommandTimeOut獲取或設(shè)置在終止對(duì)執(zhí)行命令的嘗試并生成錯(cuò)誤之前的等待時(shí)間Connection獲取或設(shè)置此Command對(duì)象使用的Connection對(duì)象的名稱(chēng)Parameters獲取Command對(duì)象需要使用的參數(shù)集合Transaction獲取或設(shè)置將在其中執(zhí)行Command的SqlTransactionCommand構(gòu)造函數(shù)通常有三種形式:publicsqlCommand();publicsqlCommand(string);publicsqlCommand(string,sqlConnection);創(chuàng)建Command對(duì)象sqlConnection
conn=newsqlConnection(“myString”)sqlCommand
myCmd=newsqlCommand(“select*fromorders”,conn)設(shè)置連接和SQL命令通過(guò)Command類(lèi)的屬性CommandText用來(lái)設(shè)置命令語(yǔ)句,Connection屬性用來(lái)設(shè)置連接對(duì)象。連接對(duì)象和命令語(yǔ)句既可以在創(chuàng)建Connection和Command對(duì)象時(shí)通過(guò)構(gòu)造函數(shù)設(shè)置,也可以通過(guò)這兩對(duì)象的相應(yīng)屬性設(shè)置。SqlConnection
conn=newSqlConnection("Server=localhost;Database=myDatabase;uid=sa;pwd=sa");conn.Open();SqlCommand
cmd=newSqlCommand("Select*from表名",conn);++++++++++++++++++++++++++++++++++++++SqlConnection
conn=newSqlConnection("Server=localhost;Database=myDatabase;uid=sa;pwd=sa");SqlCommand
cmd=newSqlCommand();cmd.Connection=conn;cmd.CommandText="deletefrom表名whereNo=2";Command對(duì)象常用的方法建立數(shù)據(jù)源的連接和設(shè)置了命令之后,Command對(duì)象執(zhí)行SQL命令有三種方法:ExecuteNonQuery、ExecuteReader和ExecuteScalarExecuteNonQuery:使用ExecuteNonQuery執(zhí)行命令不會(huì)返回結(jié)果集,只會(huì)返回語(yǔ)句影響的記錄行數(shù),它適合執(zhí)行插入、更新、刪除之類(lèi)不返回結(jié)果集的命令。如果是SELECT語(yǔ)句,那么返回的結(jié)果是1,如果發(fā)生回滾這個(gè)結(jié)果也是1.ExecuteReader:使用ExecuteReader方法執(zhí)行的命令,可以返回一個(gè)類(lèi)型化的DataReader實(shí)例或者DataReader接口的結(jié)果集。通過(guò)DataReader對(duì)象就能夠獲得數(shù)據(jù)的行集合。執(zhí)行返回?cái)?shù)據(jù)集的SELECT語(yǔ)句ExecuteScalar:執(zhí)行查詢(xún),并返回查詢(xún)所返回的結(jié)果集中第一行的第一列,忽略其他列或行,返回object類(lèi)型。如果只想檢索數(shù)據(jù)庫(kù)信息中的一個(gè)值,而不需要返回表或數(shù)據(jù)流形式的數(shù)據(jù)庫(kù)信息,那就用Command的ExecuteScalar方法就很有用。Connection:獲取或設(shè)置此Command對(duì)象使用的Connection對(duì)象的名稱(chēng)2023年1月4日21方法說(shuō)明ExecuteNonQuery用于執(zhí)行非SELECT命令,比如INSERT、DELETE或者UPDATE命令,返回三個(gè)命令所影響的數(shù)據(jù)的行數(shù)。也可以用ExecuteNonQuery()來(lái)執(zhí)行一些數(shù)據(jù)定義命令,比如新建、更新、刪除數(shù)據(jù)庫(kù)對(duì)象(如表、索引等)ExecuteScalar用于執(zhí)行SELECT查詢(xún)命令,返回?cái)?shù)據(jù)中第一行第一列的值。這個(gè)方法通常用來(lái)執(zhí)行那些用到COUNT()或SUM()函數(shù)的SELECT命令。ExecuteReader執(zhí)行SELECT命令,并返回一個(gè)DataReader對(duì)象。這個(gè)DataReader是向前只讀的數(shù)據(jù)集ExecuteNonQuery查詢(xún)更新表新建網(wǎng)頁(yè)Default.aspx添加1個(gè)Label控件和1個(gè)按鈕控件添加一個(gè)按鈕事件程序privatevoidbtnDatabasetest_click(object
sender,EventArgse){StringstrConn="DataSource=wwh;InitialCatalog=myDatabase;uid=sa;pwd=sa";SqlConnection
conn=newSqlConnection(strConn);try{inti1,i2;conn.Open();SqlCommand
cmd=newSqlCommand();cmd.Connection=conn;cmd.CommandText="updateStudentset[Name]='myName'where[No]=3";i1=cmd.ExecuteNonQuery();cmd.CommandText="deletefromStudentwhereNo=2";//刪除一行數(shù)據(jù)i2=cmd.ExecuteNonQuery();lblMessage.Text="更新后有:"+i1.ToString()+"行數(shù)據(jù)受到影響!"+"刪除后有:"+i2.ToString()+"行數(shù)據(jù)受到影響!";conn.close();}catch(Exceptionex){
lblMessage.Text=ex.Message.ToString()+"打開(kāi)數(shù)據(jù)庫(kù)失敗";}}執(zhí)行結(jié)果:更新后有:1行數(shù)據(jù)受到影響!刪除后有:1行數(shù)據(jù)受到影響!ExecuteReader讀取數(shù)據(jù)庫(kù)數(shù)據(jù)privatevoidbtnDatabasetest_click(object
sender,EventArgse){StringstrConn="DataSource=wwh;InitialCatalog=myDatabase;uid=sa;pwd=sa";SqlConnection
conn=newSqlConnection(strConn);try{StringstrReult=“”;conn.Open();SqlCommand
cmd=newSqlCommand();cmd.Connection=conn;SqlDataReaderreader;cmd.CommandText="select*fromstudent";reader=cmd.ExecuteReader();while(reader.Read()){
strReult=strReult+reader[0].ToString()+reader[1].ToString()+reader[2].ToString()+"<br>";}lblMessage.Text=strReult;reader.Close();conn.Close();}catch(Exceptionex){
lblMessage.Text=ex.Messange.ToString()+"打開(kāi)數(shù)據(jù)庫(kù)失敗";}}ExecuteScalar返回表中記錄privatevoidbtnDatabasetest_click(object
sender,EventArgse){StringstrConn="DataSource=wwh;InitialCatalog=myDatabase;uid=sa;pwd=sa";SqlConnection
conn=newSqlConnection(strConn);try{conn.Open();stringsqlstr="selectCount(*)fromstudent";SqlCommand
cmd=newSqlCommadn(sqlstr,conn);//將返回的記錄數(shù)目強(qiáng)制轉(zhuǎn)換成整型Int32count=(Int32)myCmd.ExecuteScalar();conn.Close();lblMessage.Text=count.ToString();conn.close();}catch(Exceptionex){
lblMessage.Text=ex.Messange.ToString()+"打開(kāi)數(shù)據(jù)庫(kù)失敗";}}例子使用Command對(duì)象查詢(xún)數(shù)據(jù)庫(kù)的數(shù)據(jù)使用Command對(duì)象增加數(shù)據(jù)庫(kù)的數(shù)據(jù)使用Command對(duì)象刪除數(shù)據(jù)庫(kù)的數(shù)據(jù)使用Command對(duì)象修改數(shù)據(jù)庫(kù)的數(shù)據(jù)2023年1月4日25DataReader對(duì)象DataReader對(duì)象只能查詢(xún)獲得的數(shù)據(jù)集進(jìn)行自上而下的訪(fǎng)問(wèn),但效率很高。如果僅僅是訪(fǎng)問(wèn)數(shù)據(jù)的話(huà),可以使用DataReader。但DataReader要求一直連接,將結(jié)果的一小部分先放在內(nèi)存中,讀完后再?gòu)臄?shù)據(jù)庫(kù)中讀取一部分,相當(dāng)于一個(gè)緩存機(jī)制。DataReader對(duì)象DataReader對(duì)象是一個(gè)簡(jiǎn)單的數(shù)據(jù)集,如其名一樣,用于從數(shù)據(jù)源中讀取只讀的數(shù)據(jù)集,常用于檢索大量數(shù)據(jù)。根據(jù).NETFramework數(shù)據(jù)提供程序不同,DataReader可以分成SqlDataReader、OleDbDataReader等幾類(lèi)。DataReader每次只能在內(nèi)存中保留一行,所以開(kāi)銷(xiāo)非常小。使用DataReader對(duì)象讀取數(shù)據(jù)時(shí),必須一直保持與數(shù)據(jù)庫(kù)的連接,所以也被稱(chēng)為連線(xiàn)模式,其架構(gòu)如圖所示。DataReader對(duì)象特點(diǎn)快速訪(fǎng)問(wèn)數(shù)據(jù)。由于DataReader對(duì)象是只進(jìn)和只讀的,所以開(kāi)銷(xiāo)相對(duì)較小,速度比DataSet快。只進(jìn)和只讀。不能處理數(shù)據(jù),只能顯示數(shù)據(jù)。自己管理連接。DataAdapter對(duì)象可以自動(dòng)地打開(kāi)和關(guān)閉連接,DataReader對(duì)象必須顯式地打開(kāi)和關(guān)閉連接。使用較少的服務(wù)器資源。DataReader對(duì)象常用屬性和方法Depth設(shè)置閱讀器濃度。對(duì)于SqlDataReader類(lèi),它總是返回0FieldCount
獲取當(dāng)前行的列數(shù)Item索引器屬性,以原始格式獲得一列的值。IsClose
獲得一個(gè)表明數(shù)據(jù)閱讀器有沒(méi)有關(guān)閉的一個(gè)值RecordsAffected
獲取執(zhí)行SQL語(yǔ)句所更改、添加或刪除的行數(shù)。常用屬性常用方法Read使DataReader
對(duì)象前進(jìn)到下一條記錄Close關(guān)閉DataReader對(duì)象。Get用來(lái)讀取數(shù)據(jù)集的當(dāng)前行的某一列的數(shù)據(jù)NextResult
當(dāng)讀取處理SQL語(yǔ)句的結(jié)果時(shí),使數(shù)據(jù)讀取器前進(jìn)到下一個(gè)結(jié)果DataReader讀取數(shù)據(jù)調(diào)用Read方法來(lái)訪(fǎng)問(wèn)DataReader對(duì)象中的一個(gè)記錄,因?yàn)镈ataReader對(duì)象中的默認(rèn)位置是在第一個(gè)記錄的前面,所以必須在訪(fǎng)問(wèn)任何數(shù)據(jù)之前調(diào)用Read方法。當(dāng)不再有可用記錄時(shí),Read方法就返回一個(gè)空值。Get方法包括GetDateTime、GetDouble、GetInt32或GetIntString等。調(diào)用Get方法來(lái)訪(fǎng)問(wèn)數(shù)據(jù):Dr.Read();lbName.Text=dr.GetString(1)+”,”+dr.GetString(2);DataReader對(duì)象的使用創(chuàng)建和打開(kāi)數(shù)據(jù)庫(kù)連接創(chuàng)建一個(gè)Command對(duì)象從Command對(duì)象中創(chuàng)建DataReader執(zhí)行ExecuteReader對(duì)象使用DataReader對(duì)象關(guān)閉DataReader對(duì)象關(guān)閉Connection對(duì)象利用DataReader對(duì)象并讀取數(shù)據(jù)protectedvoidbtnRead_Click(object
sender,EventArgse){//打開(kāi)Connection并創(chuàng)建Command
SqlConnection
conn=newSqlConnection("DataSource=.;InitialCatalog=myDatabase;uid=sa;pwd=sa")
conn.Open();
SqlCommand
cmdAuthors=newSqlCommand("select*fromBaseInform",conn);//創(chuàng)建DataReader
對(duì)象并讀取數(shù)據(jù)
SqlDataReadar
dr;
dr=cmdAuthors.ExecuteReader();
while(dr.Read()){
lblMessage.Text=dr["Name"]+","+dr["Sex"]+"<dr>";}//關(guān)閉DataReader
和Connection
dr.Close();
conn.Close;}DataAdapter(即數(shù)據(jù)適配器)對(duì)象是一種用來(lái)充當(dāng)DataSet對(duì)象與實(shí)際數(shù)據(jù)源之間橋梁的對(duì)象,可以說(shuō)只要有DataSet的地方就有它,它也是專(zhuān)門(mén)為DataSet服務(wù)的。DataAdapter對(duì)象屬性說(shuō)明SelectCommand獲取或設(shè)置用于在數(shù)據(jù)源中選擇記錄的命令I(lǐng)nsertCommand獲取或設(shè)置用于將新記錄插入到數(shù)據(jù)源中的命令UpdateCommand獲取或設(shè)置用于更新數(shù)據(jù)源中記錄的命令DeleteCommand獲取或設(shè)置用于從數(shù)據(jù)集中刪除記錄的命令方法說(shuō)明AddToBatch向當(dāng)前批處理添加Command對(duì)象ExecuteBatch執(zhí)行當(dāng)前批處理Fill從數(shù)據(jù)源中提取數(shù)據(jù)以填充數(shù)據(jù)集FillSchema從數(shù)據(jù)源中提取數(shù)據(jù)架構(gòu)以填充數(shù)據(jù)集Update更新數(shù)據(jù)源DataAdapter對(duì)象DataAdapter對(duì)象主要用來(lái)承接Connection和DataSet對(duì)象。DataSet對(duì)象只關(guān)心訪(fǎng)問(wèn)操作數(shù)據(jù),而不關(guān)心自身包含的數(shù)據(jù)信息來(lái)自哪個(gè)Connection連接到的數(shù)據(jù)源,而Connection對(duì)象只負(fù)責(zé)數(shù)據(jù)庫(kù)連接而不關(guān)心結(jié)果集的表示。所以,在A(yíng)SP.NET的架構(gòu)中使用DataAdapter對(duì)象連接Connection和DataSet對(duì)象。DataAdapter對(duì)象的工作方式一般有兩種:一種是通過(guò)Command對(duì)象執(zhí)行SQL語(yǔ)句,將獲得的結(jié)果集填充到DataSet對(duì)象中,另一種是將DataSet里更新數(shù)據(jù)的結(jié)果返回到數(shù)據(jù)庫(kù)中。DataAdapter對(duì)象的常用屬性形式為SqlCommand,用于描述和設(shè)置操作數(shù)據(jù)庫(kù)。使用DataAdapter對(duì)象,可以讀取、添加、更新和刪除數(shù)據(jù)源中的記錄。對(duì)于每種操作的執(zhí)行方式,適配器支持的4個(gè)屬性。SelectCommand:用來(lái)從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)DeleteCommand:刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)InsertCommand:向數(shù)據(jù)庫(kù)插入數(shù)據(jù)UpdateCommand:更新數(shù)據(jù)庫(kù)里的數(shù)據(jù)給DataAdapter對(duì)象的SelectCommand屬性賦值://創(chuàng)建連接對(duì)象conn的語(yǔ)句SqlConnection
conn=newSqlConnection("datasource=localhost;integratedsecurity=true;initialcatalog=pubs;");//創(chuàng)建DataAdapter對(duì)象SqlDataAdapter
da=newSqlDataAdapter;//給DataAdapter
對(duì)象的SelectCommand屬性賦值da.SelectCommand=newSqlCommand("select*fromuser",conn);同樣,可以給InsertCommand、DeleteCommand和UpdateCommand屬性賦值。也可以直接通過(guò)構(gòu)造函數(shù)創(chuàng)建初始化DataAdapter對(duì)象//創(chuàng)建連接對(duì)象conn語(yǔ)句SqlConnection
conn=newSqlConnection("datasource=localhost;integratedsecurity=true;initialcatalog=pubs;");//查詢(xún)數(shù)據(jù)字符串StringstrSql=“select*fromuser”;//創(chuàng)建DataAdapter對(duì)象SqlDataAdapter
da=newSqlDataAdapter(strSql,conn);SqlDataAdapter的構(gòu)造函數(shù)有:SqlDataAdapter
da=newSqlDataAdapter(strSql,cn);SqlDataAdapter
da=newSqlDataAdapter(strSql,strConn);SqlDataAdapter
da=newSqlDataAdapter(strSql,cmd);strSql是查詢(xún)數(shù)據(jù)符串;strConn是數(shù)據(jù)庫(kù)連接字符串;cmd是SqlCommand對(duì)象;cn是SqlConnection對(duì)象。DataAdapter對(duì)象
對(duì)于SQLSERVER接口,使用的是SqlDataAdapter對(duì)象,在使用DataAdapter對(duì)象時(shí),只需分別設(shè)置表示SQL命令和數(shù)據(jù)庫(kù)連接的兩個(gè)參數(shù),就可以通過(guò)它的Fill方法把查詢(xún)結(jié)果放在一個(gè)DataSet對(duì)象中。在一個(gè)DataSet對(duì)象實(shí)例中,可以包含多個(gè)DataTable,而一個(gè)DataTable可以包含多個(gè)DataRow。
2023年1月4日37當(dāng)把一個(gè)DataSet中的一個(gè)數(shù)據(jù)表復(fù)制到一個(gè)DataTable中之后,可以通過(guò)對(duì)DataTable數(shù)據(jù)的訪(fǎng)問(wèn)來(lái)實(shí)現(xiàn)對(duì)DataSet中數(shù)據(jù)的訪(fǎng)問(wèn)了。除此之外,還可以通過(guò)修改DataTable中的數(shù)據(jù)來(lái)更新DataSet。
DataRow表示DataTable的數(shù)據(jù)行,一個(gè)DataTable中的數(shù)據(jù)行會(huì)有很多。針對(duì)一個(gè)DataTable,它的Rows屬性表示這個(gè)表的所有數(shù)據(jù)行,是一個(gè)集合,類(lèi)名為DataRowCollection,他的每個(gè)元素的類(lèi)型是DataRow。2023年1月4日38DataSet是ADO.NET的核心成員之一,它是支持ADO.NET斷開(kāi)式、分布式數(shù)據(jù)方案的核心對(duì)象,也是實(shí)現(xiàn)基于非連接的數(shù)據(jù)查詢(xún)的核心組件。DataSet對(duì)象是創(chuàng)建在內(nèi)存中的集合對(duì)象,它可以包含任意數(shù)量的數(shù)據(jù)表,以及所有表的約束、索引和關(guān)系,相當(dāng)于在內(nèi)存中的一個(gè)小型關(guān)系數(shù)據(jù)庫(kù)。一個(gè)DataSet對(duì)象包括一組DataTable對(duì)象和DataRelation對(duì)象,其中,每個(gè)DataTable對(duì)象由DataColumn、DataRow和DataRelation對(duì)象組成。DataSer數(shù)據(jù)模型如圖所示。DataSet對(duì)象DataSet對(duì)象創(chuàng)建方法DataSet對(duì)象創(chuàng)建方法如下:
DataSet
數(shù)據(jù)集對(duì)象=newDataSet(“數(shù)據(jù)集的名稱(chēng)字符串”)DataSet使用方法一般有三種:1.把數(shù)據(jù)庫(kù)中的數(shù)據(jù)通過(guò)DataAdapter對(duì)象填充DataSet。2.通過(guò)DataAdapter對(duì)象操作DataSet實(shí)現(xiàn)更新數(shù)據(jù)庫(kù)。3.把XML數(shù)據(jù)流或文本加載到DataSet。通過(guò)DataAdapter對(duì)象填充DataSetDataAdapter填充DataSet的過(guò)程:(1)通過(guò)DataAdapter的SelectCommand屬性從數(shù)據(jù)庫(kù)中檢索出需要的數(shù)據(jù)。SelectCommand其實(shí)就是一個(gè)Command對(duì)象。(2)通過(guò)DataAdapter的Fill方法把檢索來(lái)的數(shù)據(jù)填充DataSet。
SqlDataAdapter
da=newSqlDataAdapter(strSql,strConn);
DataSet
ds=newDataSet();
da.Fill(ds);這樣,DataSet的實(shí)例對(duì)象ds中會(huì)創(chuàng)建一個(gè)新的DataTable.
SqlDataAdapter的Fill方法調(diào)用前不需要有活動(dòng)的SqlConnection對(duì)象,它會(huì)自己打開(kāi)strConn語(yǔ)句中的數(shù)據(jù)庫(kù),獲取查詢(xún)結(jié)果后,關(guān)閉與數(shù)據(jù)庫(kù)的連接。如果已經(jīng)存在SqlConnection對(duì)象,無(wú)論是否已經(jīng)打開(kāi),SqlDataAdapter
執(zhí)行完Fill方法后,均會(huì)將SqlConnection對(duì)象返回到原始狀態(tài)。如果DataSet中的數(shù)據(jù)需要更新,在調(diào)用Fill方法之前應(yīng)該先清除DataSet或DataTable中的數(shù)據(jù),這樣就可以確保DataTable中不會(huì)出現(xiàn)重復(fù)的數(shù)據(jù)行,也不會(huì)出現(xiàn)數(shù)據(jù)庫(kù)中已經(jīng)不存在的數(shù)據(jù)行。以MicrosoftSQLserver中的myDatabase數(shù)據(jù)庫(kù)為對(duì)象,使用SqlDataAdapter填充DataSet。privatevoidbtnDatabaseTest_click(object
sender,EventArgse){//創(chuàng)建數(shù)據(jù)連接StringstrConn="DataSource=.;InitialCatalog=myDatabase;uid=sa;pwd=sa";SqlConnection
conn=newSqlConnection(strconn);try{conn.Open();//創(chuàng)建并初始化SqlCommand對(duì)象SqlCommand
selectcmd=newSqlCommand("SELECT
No,NameFROMBaseInform“,conn);//創(chuàng)建SqlDataAdapter對(duì)象,并根據(jù)SelectCommand屬性檢索數(shù)據(jù)SqlDataAdapter
dal=newSqlDataAdapter();da1.SelectCommand=selectCmd;DataSetds1=newDataSet();//使用SqlDataAdapter的Fill方法填充DataSetda1.Fill(ds1,"BaseInform");StringstrResult="編號(hào)姓名<br>";foreach(DataRowrowinds1.Tables["BaseInform"].Rows){strResult=strResult+row["No"].ToString()+""+row["Name"].ToString()+"<br>";}lblMessage.Text=strResult;//關(guān)閉數(shù)據(jù)連接conn.Close();}catch(Exceptionex){lblMessage.Text=ex.Messange.ToString()+"打開(kāi)數(shù)據(jù)庫(kù)失敗!";}}通過(guò)DataAdapter、DataSet更新數(shù)據(jù)庫(kù)DataAdapter是通過(guò)其Update方法實(shí)現(xiàn)以DataSet中數(shù)據(jù)來(lái)更新數(shù)據(jù)庫(kù)的。當(dāng)DataSet實(shí)例中包含數(shù)據(jù)發(fā)生更改后,此時(shí)調(diào)用Update方法,DataAdapter將分析已作出的更改并執(zhí)行相應(yīng)的命令(INSERT、UPDATE或DELETE),并以此命令來(lái)更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。如果DataSet中的DataTable是映射到單個(gè)數(shù)據(jù)庫(kù)表或從單個(gè)數(shù)據(jù)庫(kù)表生成,則可以利用CommandBuiler對(duì)象自動(dòng)生成DataAdapter的DeleteCommand、InsertCommand和UpdateCommand。通過(guò)DataAdapter、DataSet更新數(shù)據(jù)庫(kù)conn.Open();//創(chuàng)建并初始化SqlCommand對(duì)象SqlCommand
selectcmd=newSqlCommand("SELECT
No,NameFROMBaseInform“,conn);//創(chuàng)建SqlDataAdapter對(duì)象,并根據(jù)SelectCommand屬性檢索數(shù)據(jù)SqlDataAdapterda1=newSqlDataAdapter();da1.SelectCommand=selectCmd;DataSetds1=newDataSet();//使用SqlDataAdapter的Fill方法填充DataSetda1.Fill(ds1,"BaseInform");//以da1為參數(shù)來(lái)初始化SqlcommandBuilder實(shí)例SqlCommandBuildersqlcb1=newSqlcommandBuilder(da1);//刪除DataSet中數(shù)據(jù)表BaseInform中第一行數(shù)據(jù)ds1.Tables["BaseInfrom"].Rows[0].Delete();//調(diào)用Update方法,以DataSet中的數(shù)據(jù)更新從數(shù)據(jù)庫(kù)da1.Update(ds
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語(yǔ)外貿(mào)大學(xué)《基礎(chǔ)西班牙語(yǔ)(II)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東水利電力職業(yè)技術(shù)學(xué)院《雕塑造型與表現(xiàn)技法》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東石油化工學(xué)院《建筑電氣識(shí)圖》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東汕頭幼兒師范高等專(zhuān)科學(xué)?!稛o(wú)機(jī)化學(xué)1》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東培正學(xué)院《音樂(lè)鑒賞與實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東嶺南職業(yè)技術(shù)學(xué)院《第二外國(guó)語(yǔ)三》2023-2024學(xué)年第一學(xué)期期末試卷
- 大學(xué)迎新活動(dòng)總結(jié)
- 2024小單元建筑幕墻構(gòu)件
- 【全程復(fù)習(xí)方略】2020-2021學(xué)年北師大版高中數(shù)學(xué)必修一課時(shí)作業(yè)(二十七)-4.2
- 【名師一號(hào)】2020-2021學(xué)年高中英語(yǔ)人教版必修4-雙基限時(shí)練3
- DRG付費(fèi)常見(jiàn)九大問(wèn)題答疑
- 中科院2022年物理化學(xué)(甲)考研真題(含答案)
- 廣東省汕尾市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)化學(xué)試卷(含答案解析)
- 《熱電阻溫度傳感器》課件
- 抖音酒店直播可行性方案
- 信訪(fǎng)業(yè)務(wù)培訓(xùn)班課件
- 物資清運(yùn)方案及
- 熱穩(wěn)定校驗(yàn)計(jì)算書(shū)
- 北京市房山區(qū)2023-2024學(xué)年三年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 婦產(chǎn)科課件-子宮內(nèi)膜息肉臨床診療路徑(2022版)解讀
- 人教版六年級(jí)數(shù)學(xué)上冊(cè)典型例題系列之第三單元分?jǐn)?shù)除法應(yīng)用題部分拓展篇(原卷版)
評(píng)論
0/150
提交評(píng)論