版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章ADO.NET數(shù)據(jù)訪問(wèn)技術(shù)第8章ADO.NET數(shù)據(jù)訪問(wèn)技術(shù)內(nèi)容ADO.NET基礎(chǔ)連接模式數(shù)據(jù)庫(kù)訪問(wèn)斷開(kāi)模式數(shù)據(jù)庫(kù)訪問(wèn)內(nèi)容ADO.NET基礎(chǔ)8.1ADO.NET基礎(chǔ)ADO.NET模型ADO.NET的組件ADO.NET的數(shù)據(jù)訪問(wèn)模式8.1ADO.NET基礎(chǔ)ADO.NET模型8.1.1ADO.NET模型8.1.1ADO.NET模型8.1.2ADO.NET的組件8.1.2ADO.NET的組件數(shù)據(jù)集DataSet位于System.Data命名空間下,用于在內(nèi)存中暫存數(shù)據(jù),可以把它看成是內(nèi)存中的小型數(shù)據(jù)庫(kù)。DataSet包含一個(gè)或多個(gè)數(shù)據(jù)表(DataTable),表數(shù)據(jù)可來(lái)自數(shù)據(jù)庫(kù)、文件或XML數(shù)據(jù)。DataSet一旦讀取到數(shù)據(jù)庫(kù)中的數(shù)據(jù)后,就在內(nèi)存中建立數(shù)據(jù)庫(kù)的副本,在此之后的所有操作都是在內(nèi)存中的DataSet中完成,直到執(zhí)行更新命令為止。數(shù)據(jù)集DataSet位于System.Data命名空間下,用在ADO.NET中,連接數(shù)據(jù)源有4種數(shù)據(jù)提供程序。如果要在應(yīng)用程序中使用任何一種數(shù)據(jù)提供程序,必須在后臺(tái)代碼中引用對(duì)應(yīng)的命名空間,類的名稱也隨之變化。數(shù)據(jù)訪問(wèn)提供程序名稱空間對(duì)應(yīng)的類名稱SQLServer數(shù)據(jù)提供程序System.Data.SqlClientSqlConnection;SqlCommand;SqlDataReader;SqlDataAdapterOLEDB數(shù)據(jù)提供程序System.Data.OleDbOledbConnection;OledbCommand;OledbDataReader;OledbDataAdapterODBC數(shù)據(jù)提供程序System.Data.OdbcOdbcConnection;OdbcCommand;OdbcDataReader;OdbcDataAdapterOracle數(shù)據(jù)提供程序System.Data.OracleClientOracleConnection;OracleCommand;OracleDataReader;OracleDataAdapter在ADO.NET中,連接數(shù)據(jù)源有4種數(shù)據(jù)提供程序。如果要在應(yīng)8.1.3ADO.NET的數(shù)據(jù)訪問(wèn)模式8.1.3ADO.NET的數(shù)據(jù)訪問(wèn)模式8.2連接模式數(shù)據(jù)庫(kù)訪問(wèn)
使用SqlConnection對(duì)象連接數(shù)據(jù)庫(kù)使用SqlCommand對(duì)象執(zhí)行數(shù)據(jù)庫(kù)命令使用SqlDataReader讀取數(shù)據(jù)為SqlCommand傳遞參數(shù)使用SqlCommand執(zhí)行存儲(chǔ)過(guò)程使用事務(wù)處理8.2連接模式數(shù)據(jù)庫(kù)訪問(wèn)
使用SqlConnection對(duì)連接模式訪問(wèn)數(shù)據(jù)庫(kù)的開(kāi)發(fā)流程有以下幾個(gè)步驟:創(chuàng)建SqlConnection對(duì)象與數(shù)據(jù)庫(kù)建立連接;創(chuàng)建SqlCommand對(duì)象對(duì)數(shù)據(jù)庫(kù)執(zhí)行SQL命令或存儲(chǔ)過(guò)程,包括增、刪、改及查詢數(shù)據(jù)庫(kù)等命令;如果查詢數(shù)據(jù)庫(kù)的數(shù)據(jù),則創(chuàng)建SqlDataReader對(duì)象讀取SqlCommand命令查詢到的結(jié)果集,并將查到的結(jié)果集綁定到控件上。連接模式訪問(wèn)數(shù)據(jù)庫(kù)的開(kāi)發(fā)流程有以下幾個(gè)步驟:8.2.1使用SqlConnection對(duì)象連接數(shù)據(jù)庫(kù)1.示例數(shù)據(jù)庫(kù)的創(chuàng)建創(chuàng)建一個(gè)示例數(shù)據(jù)庫(kù)Student,該數(shù)據(jù)庫(kù)包含StuInfo、Major和UserInfo三張表,數(shù)據(jù)庫(kù)表結(jié)構(gòu)關(guān)系圖?!纠?-1】演示如何在VisualStudio2008開(kāi)發(fā)環(huán)境下創(chuàng)建數(shù)據(jù)庫(kù)。參見(jiàn)示例\第08章\SqlServerDemo\Student.mdf8.2.1使用SqlConnection對(duì)象連接數(shù)據(jù)庫(kù)1.2.創(chuàng)建數(shù)據(jù)庫(kù)連接操作數(shù)據(jù)庫(kù)的第一步是建立與數(shù)據(jù)庫(kù)的連接,因此首先要?jiǎng)?chuàng)建SqlConnection對(duì)象。要?jiǎng)?chuàng)建SqlConnection對(duì)象必須先了解SqlConnection對(duì)象的常用屬性和方法。屬性說(shuō)明ConnectionString取得和設(shè)置連接字符串ConnectionTimeOut獲取SqlConnection對(duì)象的超時(shí)時(shí)間,單位為秒,0表示不限制。若在這個(gè)時(shí)間之內(nèi)無(wú)法連接數(shù)據(jù)源,則產(chǎn)生異常Database獲取當(dāng)前數(shù)據(jù)庫(kù)名稱DataSource獲取數(shù)據(jù)源的完整路徑和文件名,若是SQLServer數(shù)據(jù)庫(kù)則獲取所連接的SQLServer服務(wù)器名稱State獲取數(shù)據(jù)庫(kù)的連接狀態(tài),它的值ConnectionState枚舉值SqlConnection對(duì)象的常用屬性2.創(chuàng)建數(shù)據(jù)庫(kù)連接操作數(shù)據(jù)庫(kù)的第一步是建立與數(shù)據(jù)庫(kù)的連接,因ConnectionString屬性通常包含以下參數(shù),各參數(shù)間用“;”分隔。Provider:用于設(shè)置數(shù)據(jù)源的OLEDB驅(qū)動(dòng)程序。如:Access為“Microsoft.Jet.OLEDB.4.0”;SQLServer6.5或之前版本為“SQLOLEDB”。DataSource:設(shè)置數(shù)據(jù)源的實(shí)際路徑。Password:設(shè)置登錄數(shù)據(jù)庫(kù)所使用的密碼。UserID:設(shè)置登錄數(shù)據(jù)庫(kù)時(shí)所使用的帳號(hào)。例如,連接Access數(shù)據(jù)庫(kù)的的連接參數(shù)為:Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\\abc.mdbConnectionString屬性通常包含以下參數(shù),各參數(shù)對(duì)于SQL7.0或更高版本的SQL數(shù)據(jù)庫(kù),ConnectionString屬性包含的主要參數(shù)有:DataSource或Server:設(shè)置需連接的數(shù)據(jù)庫(kù)服務(wù)器名稱。InitialCatalog或Database:設(shè)置連接的數(shù)據(jù)庫(kù)名稱。AttachDBFilename:數(shù)據(jù)庫(kù)的路徑和文件名。UserID或uid:登錄SQLServer數(shù)據(jù)庫(kù)的賬戶。Password或pwd:登錄SQLServer數(shù)據(jù)庫(kù)的密碼。IntegratedSecurity:是否使用Windows集成身份驗(yàn)證,值有三種:true、false和SSPI,true和SSPI表示使用Windows集成身份驗(yàn)證。ConnectionTimeout:設(shè)置SqlConnection對(duì)象連接SQL數(shù)據(jù)庫(kù)服務(wù)器的超時(shí)時(shí)間,單位為秒,若在所設(shè)置的時(shí)間內(nèi)無(wú)法連接數(shù)據(jù)庫(kù),則返回失敗信息。默認(rèn)為15秒。對(duì)于SQL7.0或更高版本的SQL數(shù)據(jù)庫(kù),Connectio連接數(shù)據(jù)庫(kù)時(shí),有兩種驗(yàn)證模式:混合驗(yàn)證模式Windows集成驗(yàn)證模式使用混合驗(yàn)證模式的連接參數(shù)為:DataSource=localhost;InitialCatalog=northwind;UserId=sa;pwd=123其中,DataSource=localhost表示連接本機(jī)SQL數(shù)據(jù)庫(kù)的默認(rèn)服務(wù)器。使用Windows集成驗(yàn)證模式的連接參數(shù)為:
DataSource=localhost;InitialCatalog=northwind;IntegratedSecurity=true混合驗(yàn)證模式必須在連接字符串中以明文形式保存用戶名和密碼,因此安全性較差。Windows集成驗(yàn)證模式不發(fā)送用戶名和密碼;僅發(fā)送用戶通過(guò)身份驗(yàn)證的信息。從安全角度考慮,建議使用Windows集成驗(yàn)證模式。連接數(shù)據(jù)庫(kù)時(shí),有兩種驗(yàn)證模式:在本書(shū)的示例中,數(shù)據(jù)庫(kù)都是放在網(wǎng)站的App_Data目錄下。如例【8-1】中創(chuàng)建的Student數(shù)據(jù)庫(kù)的連接參數(shù)應(yīng)設(shè)置為:DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Student.mdf;IntegratedSecurity=True;UserInstance=True其中,DataSource=.\SQLEXPRESS表示SQLServer2005的SQLEXPRESS數(shù)據(jù)庫(kù)服務(wù)器,AttachDbFilename表示數(shù)據(jù)庫(kù)的路徑和文件名,|DataDirectory|表示網(wǎng)站默認(rèn)數(shù)據(jù)庫(kù)路徑App_Data。在本書(shū)的示例中,數(shù)據(jù)庫(kù)都是放在網(wǎng)站的App_Data目錄下。SqlConnection對(duì)象的常用方法方法說(shuō)明Open()打開(kāi)與數(shù)據(jù)庫(kù)的連接Close()關(guān)閉與數(shù)據(jù)庫(kù)的連接BeginTransaction()開(kāi)始一個(gè)數(shù)據(jù)庫(kù)事務(wù),可以指定事務(wù)的名稱和隔離級(jí)別ChangeDatabase()在打開(kāi)連接的狀態(tài)下,更改當(dāng)前數(shù)據(jù)庫(kù)CreateCommand()創(chuàng)建并返回與SqlConnection對(duì)象有關(guān)的SqlCommand對(duì)象Dispose()調(diào)用Close()方法關(guān)閉與數(shù)據(jù)庫(kù)的連接,并釋放所占用的系統(tǒng)資源SqlConnection對(duì)象的常用方法方法說(shuō)明在創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象時(shí),需要指定連接字符串。通常有以下2種方法獲取連接字符串:創(chuàng)建連接對(duì)象,并在應(yīng)用程序的中硬編碼連接字符串。SqlConnection對(duì)象名稱=newSqlConnection("連接字符串");或SqlConnection對(duì)象名稱=newSqlConnection();對(duì)象名稱.ConnectionString="連接字符串";在創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象時(shí),需要指定連接字符串。通常有以下2種方把連接字符串放在應(yīng)用程序的web.config文件中,再引用web.config文件。在web.config配置文件的<configuration>節(jié)中添加如下的代碼。<connectionStrings><addname="StudentCnnString"connectionString="DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Student.mdf;IntegratedSecurity=True;UserInstance=True"providerName="System.Data.SqlClient"/></connectionStrings>把連接字符串放在應(yīng)用程序的web.config文件中,再引用web.config文件中有了連接字符串后,就可以從web.config中讀取連接字符串。需要使用System.Configuration.ConfigurationManager類讀取連接字符串。代碼如下:stringstrCnn=ConfigurationManager.ConnectionStrings["StudentCnnString"].ConnectionString;//讀取連接字符串SqlConnectioncnn=newSqlConnection(strCnn);//定義連接對(duì)象為了使上述代碼正常工作,必須使用usingSystem.Configuration語(yǔ)句引入命名空間。web.config文件中有了連接字符串后,就可以從web.創(chuàng)建好SqlConnection連接對(duì)象后,并沒(méi)有與數(shù)據(jù)庫(kù)建立連接,要建立數(shù)據(jù)庫(kù)連接,還必須使用cnn.Open()方法打開(kāi)數(shù)據(jù)連接,然后才可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作。操作完數(shù)據(jù)庫(kù)后,一定要使用cnn.Close()方法關(guān)閉連接。.【例8-2】演示如何建立Student數(shù)據(jù)庫(kù)的連接。參見(jiàn)示例\第08章\SqlServerDemo\ConnectionDemo.aspx
創(chuàng)建好SqlConnection連接對(duì)象后,并沒(méi)有與數(shù)據(jù)庫(kù)建8.2.2使用SqlCommand對(duì)象執(zhí)行數(shù)據(jù)庫(kù)命令成功連接數(shù)據(jù)庫(kù)后,接著就可以使用SqlCommand對(duì)象對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作,如讀取、寫(xiě)入、修改和刪除等操作。SqlCommand對(duì)象的常用屬性屬性說(shuō)明CommandText獲取或設(shè)置要對(duì)數(shù)據(jù)源執(zhí)行的SQL命令、存儲(chǔ)過(guò)程或數(shù)據(jù)表名稱CommandType獲取或設(shè)置命令類型,可取的值:CommandType.Text、CommandType.StoredProduce或CommandType.TableDirect,分別對(duì)應(yīng)SQL命令、存儲(chǔ)過(guò)程或數(shù)據(jù)表名稱,默認(rèn)為T(mén)ext。Connection獲取或設(shè)置SqlCommand對(duì)象所使用的數(shù)據(jù)連接屬性ParametersSQL命令參數(shù)集合Transaction設(shè)置Command對(duì)象所屬的事務(wù)8.2.2使用SqlCommand對(duì)象執(zhí)行數(shù)據(jù)庫(kù)命令成功連建立SqlCommand對(duì)象的方法有4種:SqlCommand對(duì)象名=newSqlCommand();SqlCommand對(duì)象名=newSqlCommand("SQL命令");SqlCommand對(duì)象名=newSqlCommand("SQL命令",連接對(duì)象);SqlCommand對(duì)象名=newSqlCommand("SQL命令",連接對(duì)象,事務(wù)對(duì)象);建立SqlCommand對(duì)象的方法有4種:SqlCommanSqlCommand對(duì)象的常用方法方法說(shuō)明Cancel取消SqlCommand對(duì)象的執(zhí)行CreateParameter創(chuàng)建Parameter對(duì)象ExecuteNonQuery執(zhí)行CommandText屬性指定的內(nèi)容,返回?cái)?shù)據(jù)表被影響的行數(shù)。該方法只能執(zhí)行Insert、Update和Delete命令ExecuteReader執(zhí)行CommandText屬性指定的內(nèi)容,返回DataReader對(duì)象。該方法用于執(zhí)行返回多條記錄的Select命令ExecuteScalar執(zhí)行CommandText屬性指定的內(nèi)容,以object類型返回結(jié)果表第一行第一列的值。該方法一般用來(lái)執(zhí)行查詢單值的Select命令ExecuteXmlReader執(zhí)行CommandText屬性指定的內(nèi)容,返回XmlReader對(duì)象。該方法以XML文檔格式返回結(jié)果集SqlCommand對(duì)象的常用方法方法說(shuō)明Can1.ExecuteNonQuery方法ExecuteNonQuery方法只能執(zhí)行Insert、Update和Delete命令,因此可以增加、修改和刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)。增加、修改和刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)的步驟相同,具體描述如下:創(chuàng)建SqlConnection對(duì)象,設(shè)置連接字符串;創(chuàng)建SqlCommand對(duì)象,設(shè)置它的Connection和CommandText屬性,分別表示數(shù)據(jù)庫(kù)連接和需要執(zhí)行的SQL命令。打開(kāi)與數(shù)據(jù)庫(kù)連接;使用SqlCommand對(duì)象的ExecuteNonQuery方法執(zhí)行CommandText中的命令;并根據(jù)返回值判斷是否對(duì)數(shù)據(jù)庫(kù)操作成功。關(guān)閉與數(shù)據(jù)庫(kù)連接;1.ExecuteNonQuery方法【例8-3】演示如何使用ExecuteNonQuery方法增加Student數(shù)據(jù)庫(kù)中UserInfo表的用戶信息。參見(jiàn)示例\第08章\SqlServerDemo\Command_InsertDemo.aspx【例8-4】演示如何使用ExecuteNonQuery方法修改Student數(shù)據(jù)庫(kù)中UserInfo表的用戶信息。參見(jiàn)示例\第08章\SqlServerDemo\Command_UpdateDemo.aspx
【例8-5】演示如何使用ExecuteNonQuery方法刪除Student數(shù)據(jù)庫(kù)中UserInfo表的用戶信息。參見(jiàn)示例\第08章\SqlServerDemo\Command_DeleteDemo.aspx
【例8-3】演示如何使用ExecuteNonQuery方法增2.ExecuteScalar方法ExecuteScalar方法一般用來(lái)執(zhí)行查詢單值的Select命令,它以object類型返回結(jié)果表第一行第一列的值。對(duì)數(shù)據(jù)庫(kù)操作時(shí),具體步驟如下:創(chuàng)建SqlConnection對(duì)象,設(shè)置連接字符串;創(chuàng)建SqlCommand對(duì)象,設(shè)置它的Connection和CommandText屬性;打開(kāi)與數(shù)據(jù)庫(kù)連接;使用SqlCommand對(duì)象的ExecuteScalar方法執(zhí)行CommandText中的命令;并返回結(jié)果表第一行第一列的值供應(yīng)用程序使用。關(guān)閉與數(shù)據(jù)庫(kù)連接;2.ExecuteScalar方法【例8-6】演示如何使用ExecuteScalar方法查詢Student數(shù)據(jù)庫(kù)中StuInfo表的學(xué)生人數(shù)。參見(jiàn)示例\第08章\SqlServerDemo\Command_ExecuteScalar.aspx
【例8-6】演示如何使用ExecuteScalar方法查詢S8.2.3使用SqlDataReader讀取數(shù)據(jù)SqlDataReader對(duì)象是一個(gè)向前只讀的記錄指針,用于快速讀取數(shù)據(jù)。對(duì)于只需要順序顯示數(shù)據(jù)表中記錄的應(yīng)用而言,SqlDataReader對(duì)象是比較理想的選擇。在讀取數(shù)據(jù)時(shí),它需要與數(shù)據(jù)源保持實(shí)時(shí)連接,以循環(huán)的方式讀取結(jié)果集中的數(shù)據(jù)。這個(gè)對(duì)象不能直接實(shí)例化,而必須調(diào)用SqlCommand對(duì)象的ExecuteReader方法才能創(chuàng)建有效的SqlDataReader對(duì)象。SqlDataReader對(duì)象一旦創(chuàng)建,即可通過(guò)對(duì)象的屬性、方法訪問(wèn)數(shù)據(jù)源中的數(shù)據(jù)。8.2.3使用SqlDataReader讀取數(shù)據(jù)SqlDaSqlDataReader對(duì)象的常用屬性:FieldCount:獲取由SqlDataReader得到的一行數(shù)據(jù)中的字段數(shù)。isClosed:獲取SqlDataReader對(duì)象的狀態(tài)。true表示關(guān)閉,false表示打開(kāi)。HasRows:表示SqlDataReader是否包含數(shù)據(jù)。SqlDataReader對(duì)象的常用屬性:SqlDataReader對(duì)象的常用方法:Close()方法:不帶參數(shù),無(wú)返回值,用來(lái)關(guān)閉SqlDataReader對(duì)象。Read()方法:讓記錄指針指向本結(jié)果集中的下一條記錄,返回值是true或false。NextResult()方法:當(dāng)返回多個(gè)結(jié)果集時(shí),使用該方法讓記錄指針指向下一個(gè)結(jié)果集。當(dāng)調(diào)用該方法獲得下一個(gè)結(jié)果集后,依然要用Read方法來(lái)遍歷訪問(wèn)該結(jié)果集。GetValue(inti)方法:根據(jù)傳入的列的索引值,返回當(dāng)前記錄行里指定列的值。由于事先無(wú)法預(yù)知返回列的數(shù)據(jù)類型,所以該方法使用Object類型來(lái)接收返回?cái)?shù)據(jù)。GetValues(Object[]values)方法:該方法會(huì)把當(dāng)前記錄行里所有的數(shù)據(jù)保存到一個(gè)數(shù)組里??梢允褂肍ieldCount屬性來(lái)獲知記錄里字段的總數(shù),據(jù)此定義接收返回值的數(shù)組長(zhǎng)度。GetDataTypeName(inti)方法:通過(guò)輸入列索引,獲得該列的類型。GetName(inti)方法:通過(guò)輸入列索引,獲得該列的名稱。綜合使用GetName和GetValue兩方法,可以獲得數(shù)據(jù)表里列名和列的字段。IsDBNull(inti)方法:判斷指定索引號(hào)的列的值是否為空,返回True或False。SqlDataReader對(duì)象的常用方法:使用SqlDataReader對(duì)象查詢數(shù)據(jù)庫(kù)的一般步驟:創(chuàng)建SqlConnection對(duì)象,設(shè)置連接字符串;創(chuàng)建SqlCommand對(duì)象,設(shè)置它的Connection和CommandText屬性,分別表示數(shù)據(jù)庫(kù)連接和需要執(zhí)行的SQL命令。打開(kāi)與數(shù)據(jù)庫(kù)連接;使用SqlCommand對(duì)象的ExecuteReader方法執(zhí)行CommandText中的命令;并把返回的結(jié)果放在SqlDataReader對(duì)象中。通過(guò)循環(huán),處理數(shù)據(jù)庫(kù)查詢結(jié)果。關(guān)閉與數(shù)據(jù)庫(kù)連接;使用SqlDataReader對(duì)象查詢數(shù)據(jù)庫(kù)的一般步驟:【例8-7】演示如何使用SqlDataReader對(duì)象讀取StuInfo表的記錄。參見(jiàn)示例\第08章\SqlServerDemo\DataReaderDemo.aspx
【例8-7】演示如何使用SqlDataReader對(duì)象讀取S使用SqlDataReader對(duì)象時(shí),應(yīng)注意以下幾點(diǎn):讀取數(shù)據(jù)時(shí),SqlConnection對(duì)象必須處于打開(kāi)狀態(tài)。必須通過(guò)SqlCommand對(duì)象的ExecuteReader()方法,產(chǎn)生SqlDataReader對(duì)象的實(shí)例。只能按向下的順序逐條讀取記錄,不能隨機(jī)讀取。且無(wú)法直接獲知讀取記錄的總數(shù)。SqlDataReader對(duì)象管理的查詢結(jié)果是只讀的,不能修改。使用SqlDataReader對(duì)象時(shí),應(yīng)注意以下幾點(diǎn):在VisualStudio2008的Web應(yīng)用程序中,提供了大量列表綁定控件,如DropDownList、ListBox和GridView控件等,可以直接將SqlDataReader對(duì)象綁定到這些控件來(lái)顯示查詢結(jié)果。與控件綁定時(shí),主要設(shè)置控件的以下屬性和方法:DataSource屬性:設(shè)置控件的數(shù)據(jù)源,可以是SqlDataReader對(duì)象,也可以是DataSet對(duì)象。DataMember屬性:當(dāng)數(shù)據(jù)源為DataSet對(duì)象時(shí),設(shè)置控件要顯示的數(shù)據(jù)表名。DataTextField屬性:對(duì)于綁定DropDownList、ListBox等控件時(shí),設(shè)置顯示數(shù)據(jù)的字段名稱。DataValueField屬性:對(duì)于綁定DropDownList、ListBox等控件時(shí),設(shè)置隱藏值的字段名稱。DataBind方法:設(shè)置完控件的綁定屬性后,調(diào)用該方法將數(shù)據(jù)綁定到控件上。在VisualStudio2008的Web應(yīng)用程序中,提【例8-8】演示如何將SqlDataReder對(duì)象與DropDownList控件綁定。本示例主要在DropDownList控件中顯示Major表的記錄。參見(jiàn)示例\第08章\SqlServerDemo\DataReader_DataBind.aspx
【例8-8】演示如何將SqlDataReder對(duì)象與Drop8.2.4為SqlCommand傳遞參數(shù)【例8-9】演示如何創(chuàng)建一個(gè)登錄頁(yè)面。參見(jiàn)示例\第08章\SqlServerDemo\Login.aspx
【例8-10】下面演示如何使用參數(shù)化的方法安全登錄網(wǎng)站。參見(jiàn)示例\第08章\SqlServerDemo\Login.aspx
8.2.4為SqlCommand傳遞參數(shù)【例8-9】演示如8.2.5使用SqlCommand執(zhí)行存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程是SQL語(yǔ)句和可選控制流語(yǔ)句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。對(duì)于大中型的應(yīng)用程序中,使用存儲(chǔ)過(guò)程具有下列優(yōu)點(diǎn):一次創(chuàng)建和測(cè)試好后,可以多次供應(yīng)用程序調(diào)用數(shù)據(jù)庫(kù)人員和Web應(yīng)用程序開(kāi)發(fā)人員可以獨(dú)立地工作,簡(jiǎn)化了分工。Web應(yīng)用程序和開(kāi)發(fā)人員不直接訪問(wèn)數(shù)據(jù)庫(kù),提高了數(shù)據(jù)庫(kù)的安全性。存儲(chǔ)過(guò)程在創(chuàng)建時(shí)即在服務(wù)器上進(jìn)行預(yù)編譯,因此具有較高的執(zhí)行效率。一個(gè)存儲(chǔ)過(guò)程可以執(zhí)行上百條SQL語(yǔ)句,降低網(wǎng)絡(luò)通信量。存儲(chǔ)過(guò)程或數(shù)據(jù)庫(kù)結(jié)構(gòu)的更改不會(huì)影響應(yīng)用程序,具有一定的靈活性。8.2.5使用SqlCommand執(zhí)行存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程是S存儲(chǔ)過(guò)程按返回值的情況,同樣分為3種:返回記錄的存儲(chǔ)過(guò)程;返回單個(gè)值的存儲(chǔ)過(guò)程;執(zhí)行操作的存儲(chǔ)過(guò)程。使用SqlCommand對(duì)象執(zhí)行存儲(chǔ)過(guò)程與執(zhí)行SQL語(yǔ)句一樣,分為以下3種情況。返回記錄的存儲(chǔ)過(guò)程:使用SqlCommand對(duì)象的ExecuteReader方法執(zhí)行,并從數(shù)據(jù)庫(kù)中獲取查詢結(jié)果集。返回標(biāo)量值的存儲(chǔ)過(guò)程:使用SqlCommand對(duì)象的ExecuteScalar方法執(zhí)行,并從數(shù)據(jù)庫(kù)中檢索單個(gè)值執(zhí)行操作的存儲(chǔ)過(guò)程:使用SqlCommand對(duì)象的ExecuteNoQuery方法執(zhí)行,并返回受影響的記錄數(shù)。存儲(chǔ)過(guò)程按返回值的情況,同樣分為3種:返回記錄的存儲(chǔ)過(guò)程;返【例8-11】演示如何使用存儲(chǔ)過(guò)程的方法安全登錄網(wǎng)站。參見(jiàn)示例\第08章\SqlServerDemo\Login.aspx
【例8-11】演示如何使用存儲(chǔ)過(guò)程的方法安全登錄網(wǎng)站。參見(jiàn)示8.2.6使用事務(wù)處理在.Net中,事務(wù)處理機(jī)制共有4種:數(shù)據(jù)庫(kù)事務(wù)ADO.NET事務(wù)ASP.NET事務(wù)企業(yè)服務(wù)級(jí)事務(wù)【例8-12】下面演示如何使用ADO.NET事務(wù)。在Student數(shù)據(jù)庫(kù)中,刪除Major表的專業(yè)記錄的同時(shí),希望在StuInfo表中刪除該專業(yè)的學(xué)生記錄。參見(jiàn)示例\第08章\SqlServerDemo\TransactionDemo.aspx
8.2.6使用事務(wù)處理在.Net中,事務(wù)處理機(jī)制共有4種:8.3斷開(kāi)模式數(shù)據(jù)庫(kù)訪問(wèn)DataSet數(shù)據(jù)集使用SqlDataAdapter對(duì)象執(zhí)行數(shù)據(jù)庫(kù)命令8.3斷開(kāi)模式數(shù)據(jù)庫(kù)訪問(wèn)DataSet數(shù)據(jù)集斷開(kāi)模式訪問(wèn)數(shù)據(jù)庫(kù)的開(kāi)發(fā)流程有以下幾個(gè)步驟:創(chuàng)建SqlConnection對(duì)象與數(shù)據(jù)庫(kù)建立連接;創(chuàng)建SqlDataAdapter對(duì)象對(duì)數(shù)據(jù)庫(kù)執(zhí)行SQL命令或存儲(chǔ)過(guò)程,包括增、刪、改及查詢數(shù)據(jù)庫(kù)等命令;如果查詢數(shù)據(jù)庫(kù)的數(shù)據(jù),則使用SqlDataAdapter的Fill方法填充DataSet;如果是對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改操作,首先要對(duì)DataSet對(duì)象進(jìn)行更新,然后使用SqlDataAdapter的Update方法將DataSet中的修改內(nèi)容更新到數(shù)據(jù)庫(kù)中。使用SqlDataAdapter對(duì)數(shù)據(jù)庫(kù)的操作過(guò)程中,連接的打開(kāi)和關(guān)閉是自動(dòng)完成的,無(wú)需手動(dòng)編碼。斷開(kāi)模式訪問(wèn)數(shù)據(jù)庫(kù)的開(kāi)發(fā)流程有以下幾個(gè)步驟:斷開(kāi)模式訪問(wèn)數(shù)據(jù)庫(kù)斷開(kāi)模式訪問(wèn)數(shù)據(jù)庫(kù)8.3.1DataSet數(shù)據(jù)集DataSet是ADO.NET的核心組建之一,位于System.Data命名空間下,是一個(gè)內(nèi)存中的小型數(shù)據(jù)庫(kù)。數(shù)據(jù)集是包含數(shù)據(jù)表的對(duì)象,可以在這些數(shù)據(jù)表中臨時(shí)存儲(chǔ)數(shù)據(jù)以便在應(yīng)用程序中使用。如果應(yīng)用程序要求使用數(shù)據(jù),則可以將該數(shù)據(jù)加載到數(shù)據(jù)集中,數(shù)據(jù)集在本地內(nèi)存中為應(yīng)用程序提供了待用數(shù)據(jù)的緩存。即使應(yīng)用程序從數(shù)據(jù)庫(kù)斷開(kāi)連接,也可以使用數(shù)據(jù)集中的數(shù)據(jù)。數(shù)據(jù)集維護(hù)有關(guān)其數(shù)據(jù)更改的信息,因此可以跟蹤數(shù)據(jù)更新,并在應(yīng)用程序重新連接時(shí)將更新發(fā)送回?cái)?shù)據(jù)庫(kù)。8.3.1DataSet數(shù)據(jù)集DataSet是ADO.NEDataSet對(duì)象的結(jié)構(gòu)模型圖DataSet對(duì)象的結(jié)構(gòu)模型圖數(shù)據(jù)集可以分為類型化和非類型化兩種數(shù)據(jù)集。類型化數(shù)據(jù)集是繼承自DataSet類,通過(guò)“數(shù)據(jù)集設(shè)計(jì)器”創(chuàng)建一個(gè)新的強(qiáng)類型數(shù)據(jù)集類。其架構(gòu)信息如表、行、列等都已內(nèi)置。由于類型化數(shù)據(jù)集繼承自DataSet類,因此類型化數(shù)據(jù)集具有DataSet類的所有功能。非類型化數(shù)據(jù)集沒(méi)有相應(yīng)的內(nèi)置架構(gòu)。與類型化數(shù)據(jù)集一樣,非類型化數(shù)據(jù)集也包含表、列等,但它們只作為集合公開(kāi)。數(shù)據(jù)集可以分為類型化和非類型化兩種數(shù)據(jù)集。1.?dāng)?shù)據(jù)集(DataSet)對(duì)象創(chuàng)建創(chuàng)建DataSet的語(yǔ)法格式為:DataSet對(duì)象名=newDataSet();或DataSet對(duì)象名=newDataSet("數(shù)據(jù)集名");例如,創(chuàng)建數(shù)據(jù)集對(duì)象dsStu,代碼如下:DataSetdsStu=newDataSet();或DataSetdsStu=newDataSet("Student");1.?dāng)?shù)據(jù)集(DataSet)對(duì)象創(chuàng)建DataSet對(duì)象的常用屬性和方法屬性方法說(shuō)明DataSetName屬性獲取或設(shè)置DataSet對(duì)象的名稱Tables屬性獲取數(shù)據(jù)集的數(shù)據(jù)表集合Clear方法刪除DataSet對(duì)象中所有表Copy方法復(fù)制DataSet的結(jié)構(gòu)和數(shù)據(jù),返回與本DataSet對(duì)象具有相同結(jié)構(gòu)和數(shù)據(jù)的DataSet對(duì)象DataSet對(duì)象的常用屬性和方法屬性方法說(shuō)明2.?dāng)?shù)據(jù)表(DataTable)對(duì)象的創(chuàng)建DataSet中的每個(gè)數(shù)據(jù)表都是一個(gè)DataTable對(duì)象。定義DataTable對(duì)象的語(yǔ)法格式為:DataTable對(duì)象名=newDataTable();或DataTable對(duì)象名=newDataTable("數(shù)據(jù)表名");例如,創(chuàng)建數(shù)據(jù)表對(duì)象dtStu,代碼如下:DataTabledtStuInfo=newDataTable();dtStuInfo.TableName="StuInfo";或DataTabledtStuInfo=newDataTable("StuInfo");2.?dāng)?shù)據(jù)表(DataTable)對(duì)象的創(chuàng)建DataTable對(duì)象的常用屬性和方法屬性方法說(shuō)明Columns屬性獲取數(shù)據(jù)表的所有字段DataSet屬性獲取DataTable對(duì)象所屬的DataSet對(duì)象DefaultView屬性獲取與數(shù)據(jù)表相關(guān)的DataView對(duì)象PrimaryKey屬性獲取或設(shè)置數(shù)據(jù)表的主鍵Rows屬性獲取數(shù)據(jù)表的所有行TableName屬性獲取或設(shè)置數(shù)據(jù)表名Clear()方法清除表中所有的數(shù)據(jù)NewRow()方法創(chuàng)建一個(gè)與當(dāng)前數(shù)據(jù)表有相同字段結(jié)構(gòu)的數(shù)據(jù)行DataTable對(duì)象的常用屬性和方法屬性方法說(shuō)創(chuàng)建好的數(shù)據(jù)表對(duì)象,可以添加到數(shù)據(jù)集對(duì)象中,代碼如下:
dsStu.Tables.Add(dtStuInfo);創(chuàng)建好的數(shù)據(jù)表對(duì)象,可以添加到數(shù)據(jù)集對(duì)象中,代碼如下:3.?dāng)?shù)據(jù)列(DataColumn)對(duì)象的創(chuàng)建DataTable對(duì)象中包含多個(gè)數(shù)據(jù)列,每列就是一個(gè)DataColumn對(duì)象。定義DataColumn對(duì)象的語(yǔ)法格式為:DataColumn對(duì)象名=newDataColumn();或DataColumn對(duì)象名=newDataColumn("字段名");或DataColumn對(duì)象名=newDataColumn("字段名",數(shù)據(jù)類型);3.?dāng)?shù)據(jù)列(DataColumn)對(duì)象的創(chuàng)建例如,創(chuàng)建數(shù)據(jù)列對(duì)象stuNoColumn,代碼如下:DataColumnstuNoColumn=newDataColumn();stuNoColumn.ColumnName="StuNo";stuNoColumn.DataType=System.Type.GetType("System.String");或DataColumnstuNoColumn=newDataColumn("StuNo",System.Type.GetType("System.String"));例如,創(chuàng)建數(shù)據(jù)列對(duì)象stuNoColumn,代碼如下:DataTable對(duì)象的常用屬性和方法屬性說(shuō)明AllowDBNull設(shè)置該字段可否為空值。默認(rèn)為trueCaption獲取或設(shè)置字段標(biāo)題。若為指定字段標(biāo)題,則字段標(biāo)題與字段名相同ColumnName獲取或設(shè)置字段名DataType獲取或設(shè)置字段的數(shù)據(jù)類型DefaultValue獲取或設(shè)置新增數(shù)據(jù)行時(shí),字段的默認(rèn)值ReadOnly獲取或設(shè)置新增數(shù)據(jù)行時(shí),字段的值是否可修改。默認(rèn)值為false說(shuō)明:通過(guò)DataColumn對(duì)象的DataType屬性設(shè)置字段數(shù)據(jù)類型時(shí),不可直接設(shè)置數(shù)據(jù)類型,而要按照以下語(yǔ)法格式:對(duì)象名.DataType=System.Type.GetType("數(shù)據(jù)類型"));DataTable對(duì)象的常用屬性和方法屬性說(shuō)明A創(chuàng)建好的數(shù)據(jù)列對(duì)象,可以添加到數(shù)據(jù)表對(duì)象中,代碼如下:
dtStuInfo.Columns.Add(stuNoColumn);創(chuàng)建好的數(shù)據(jù)列對(duì)象,可以添加到數(shù)據(jù)表對(duì)象中,代碼如下:4.?dāng)?shù)據(jù)行(DataRow)的創(chuàng)建DataTable對(duì)象可以包含多個(gè)數(shù)據(jù)列,每行就是一個(gè)DataRow對(duì)象。定義DataRow對(duì)象的語(yǔ)法格式為: DataRow對(duì)象名=DataTable對(duì)象.NewRow();注意:DataRow對(duì)象不能用New來(lái)創(chuàng)建,而需要用數(shù)據(jù)表對(duì)象的NewRow方法創(chuàng)建。例如,為數(shù)據(jù)表對(duì)象dtStu添加一個(gè)新的數(shù)據(jù)行,代碼如下:
DataRowdr=dtStuInfo.NewRow();訪問(wèn)一行中某個(gè)單元格內(nèi)容的方法為:DataRow對(duì)象名["字段名"]或DataRow對(duì)象名[序號(hào)]4.?dāng)?shù)據(jù)行(DataRow)的創(chuàng)建DataRow對(duì)象的常用屬性和方法屬性方法說(shuō)明RowState屬性獲取數(shù)據(jù)行的當(dāng)前狀態(tài),屬于DataRowState枚舉型,分別為:Add、Delete、Detached、Modified、UnchangedAcceptChanges方法接受數(shù)據(jù)行的變動(dòng)BeginEdit方法開(kāi)始數(shù)據(jù)行的編輯CancelEdit方法取消數(shù)據(jù)行的編輯Delete方法刪除數(shù)據(jù)行EndEdit方法結(jié)束數(shù)據(jù)行的編輯DataRow對(duì)象的常用屬性和方法屬性方法說(shuō)明Ro5.視圖對(duì)象(DataView)的創(chuàng)建數(shù)據(jù)視圖DataView是一個(gè)對(duì)象,它位于數(shù)據(jù)表上面一層,提供經(jīng)過(guò)篩選和排序后的表視圖。通過(guò)定制數(shù)據(jù)視圖可以選擇只顯示表記錄的一個(gè)子集,同時(shí)在一個(gè)數(shù)據(jù)表上可定義多個(gè)DataView。定義DataView對(duì)象的語(yǔ)法格式為:DataView對(duì)象名=newDataView(數(shù)據(jù)表對(duì)象);例如:DataViewdvStuInfo=newDataView(dtStuInfo);5.視圖對(duì)象(DataView)的創(chuàng)建DataView對(duì)象可以通過(guò)以下2個(gè)屬性定制不同的數(shù)據(jù)視圖。RowFilter屬性:設(shè)置選取數(shù)據(jù)行的篩選表達(dá)式。Sort屬性:設(shè)置排序字段和方式。例如:DataViewdvStuInfo=newDataView(ds.Tables("StuInfo"));dvStuInfo.Sort="StuNodesc";//按StuNo字段降序排,如果要升序,將desc改為ascdvStuInfo.RowFilter="Name='張三'";//篩選出姓名為張三的學(xué)生DataView對(duì)象可以通過(guò)以下2個(gè)屬性定制不同的數(shù)據(jù)視圖?!纠?-13】在內(nèi)存中的數(shù)據(jù)集中,創(chuàng)建一個(gè)數(shù)據(jù)表StuInfo,包含學(xué)號(hào)(StuNo字符串型)、姓名(Name字符串型)和性別(Sex字符串型)。對(duì)于所建立的內(nèi)存數(shù)據(jù)表StuInfo,編寫(xiě)程序逐行將數(shù)據(jù)填入該數(shù)據(jù)表,最后將數(shù)據(jù)綁定到頁(yè)面的GridView控件上。參見(jiàn)示例\第08章\SqlServerDemo\DataSetDemo.aspx
【例8-13】在內(nèi)存中的數(shù)據(jù)集中,創(chuàng)建一個(gè)數(shù)據(jù)表StuInf6.類型化的數(shù)據(jù)集創(chuàng)建類型化的數(shù)據(jù)集有多種方法,下面介紹如何使用“數(shù)據(jù)集設(shè)計(jì)器”創(chuàng)建數(shù)據(jù)集。在“解決方案資源管理器中”,鼠標(biāo)右鍵單擊項(xiàng)目名稱,選擇“添加新項(xiàng)”菜單。從“添加新項(xiàng)”對(duì)話框中選擇“數(shù)據(jù)集”。鍵入該數(shù)據(jù)集的名稱。單擊“添加”按鈕。VisualStudio2008會(huì)提示把強(qiáng)類型數(shù)據(jù)集放到App_Code目錄中,選擇“是”按鈕。數(shù)據(jù)集將添加到項(xiàng)目的App_Code目錄下,并打開(kāi)“數(shù)據(jù)集設(shè)計(jì)器”。可以從“工具箱”的“數(shù)據(jù)集”選項(xiàng)卡中拖數(shù)據(jù)表等控件到設(shè)計(jì)器上,設(shè)計(jì)相應(yīng)的數(shù)據(jù)集,該數(shù)據(jù)集存儲(chǔ)在.xsd文件中。6.類型化的數(shù)據(jù)集【例8-14】演示如何使用類型化的數(shù)據(jù)集完成【例8-13】的功能。參見(jiàn)示例\第08章\SqlServerDemo\DSStudent.xsd和DSStudentDemo.aspx
【例8-14】演示如何使用類型化的數(shù)據(jù)集完成【例8-13】的下面將非類型化數(shù)據(jù)集與類型化數(shù)據(jù)集比較,類型化數(shù)據(jù)集有以下兩個(gè)優(yōu)勢(shì)。類型化數(shù)據(jù)集的架構(gòu)信息已經(jīng)預(yù)先“硬編碼”到數(shù)據(jù)集內(nèi)。也就是說(shuō),數(shù)據(jù)集按將要獲取的數(shù)據(jù)的表、列以及數(shù)據(jù)類型預(yù)先初始化了。這樣,執(zhí)行查詢獲取實(shí)際信息時(shí)會(huì)稍微快一些,因?yàn)閿?shù)據(jù)提供程序分兩步填充空DataSet。它首先獲取最基礎(chǔ)的架構(gòu)信息,然后再執(zhí)行查詢。可以通過(guò)類型化數(shù)據(jù)集的屬性名稱而不是基于字段查找的方式訪問(wèn)表和字段的值。這樣,如果使用了錯(cuò)誤的表名、字段名或數(shù)據(jù)類型,就可以在編譯時(shí)而不是運(yùn)行時(shí)捕獲錯(cuò)誤。例如,要訪問(wèn)StuInfo表的第i行Name字段的值,非類型化數(shù)據(jù)集的方法是dsStu.Tables["StuInfo"].Rows[i]["Name"];類型化的數(shù)據(jù)集的方法是dsStu.StuInfo[i].Name。下面將非類型化數(shù)據(jù)集與類型化數(shù)據(jù)集比較,類型化數(shù)據(jù)集有以下兩8.3.2使用SqlDataAdapter對(duì)象執(zhí)行數(shù)據(jù)庫(kù)命令DataAdapter是一個(gè)特殊的類,其作用是數(shù)據(jù)源與DataSet對(duì)象之間溝通的橋梁。DataAdapter提供了雙向的數(shù)據(jù)傳輸機(jī)制,它可以在數(shù)據(jù)源上執(zhí)行Select語(yǔ)句,把查詢結(jié)果集傳送到DataSet對(duì)象的數(shù)據(jù)表(DataTable)中,還可以執(zhí)行Insert、Update和Delete語(yǔ)句,將DataTable對(duì)象更改過(guò)的數(shù)據(jù)提取并更新回?cái)?shù)據(jù)源。8.3.2使用SqlDataAdapter對(duì)象執(zhí)行數(shù)據(jù)庫(kù)命DataAdapte對(duì)象包含四個(gè)常用屬性:SelectCommad屬性:是一個(gè)Command對(duì)象,用于從數(shù)據(jù)源中檢索數(shù)據(jù)。InsertCommand、UpdateCommand和DeleteCommand屬性:也是Command對(duì)象,用于按照對(duì)DataSet中數(shù)據(jù)的修改來(lái)管理對(duì)數(shù)據(jù)源中數(shù)據(jù)的更新。DataAdapte對(duì)象包含四個(gè)常用屬性:DataAdapter對(duì)象的常用方法:Fill方法:調(diào)用Fill方法會(huì)自動(dòng)執(zhí)行SelectCommand屬性中提供的命令,獲取結(jié)果集并填充數(shù)據(jù)集的DataTable對(duì)象。其本質(zhì)是通過(guò)執(zhí)行SelectCommand對(duì)象的Select語(yǔ)句查詢數(shù)據(jù)庫(kù),返回DataReader對(duì)象,通過(guò)DataReader對(duì)象隱式地創(chuàng)建DataSet中的表,并填充DataSet中表行的數(shù)據(jù)。DataAdapter對(duì)象的常用方法:Update方法:調(diào)用InsertCommand、UpdateCommand和DeleteCommand屬性指定的SQL命令,將DataSet對(duì)象
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《心臟康復(fù)培訓(xùn)》課件
- 小學(xué)一年級(jí)20以內(nèi)加減法混合運(yùn)算
- 小學(xué)五年級(jí)數(shù)學(xué)小數(shù)乘除法計(jì)算練習(xí)題 集
- 二年級(jí)上冊(cè)21 雪孩子(教案)
- 2025年1月內(nèi)蒙古自治區(qū)普通高等學(xué)校招生考試適應(yīng)性測(cè)試(八省聯(lián)考)歷史試題
- 《新地產(chǎn)營(yíng)銷新機(jī)會(huì)》課件
- 混凝土路面施工協(xié)議書(shū)
- 口腔科護(hù)士的工作總結(jié)
- 育人為本點(diǎn)滴栽培班主任工作總結(jié)
- 浴室用品銷售工作總結(jié)
- 年產(chǎn)500t o-甲基-n-硝基異脲技改項(xiàng)目可研報(bào)告
- 酒店英語(yǔ)會(huì)話(第六版)教案 unit 1 Room Reservations
- 2024至2030年中國(guó)蔬菜種植行業(yè)市場(chǎng)全景監(jiān)測(cè)及投資策略研究報(bào)告
- 2024旅行社免責(zé)協(xié)議書(shū)模板范本
- 2024汽車行業(yè)社媒營(yíng)銷趨勢(shì)【微播易CAA中國(guó)廣告協(xié)會(huì)】-2024-數(shù)字化
- 2022-2023學(xué)年教科版五年級(jí)科學(xué)上冊(cè)期末復(fù)習(xí)資料
- DL∕T 2558-2022 循環(huán)流化床鍋爐基本名詞術(shù)語(yǔ)
- 教師進(jìn)企業(yè)實(shí)踐日志
- 抵押物變更協(xié)議范本版
- 煤矸石充填塌陷區(qū)復(fù)墾技術(shù)規(guī)程
- TSG-T7001-2023電梯監(jiān)督檢驗(yàn)和定期檢驗(yàn)規(guī)則宣貫解讀
評(píng)論
0/150
提交評(píng)論