版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第第8章章 ADO.NET數(shù)據(jù)數(shù)據(jù)庫庫訪問技術(shù)訪問技術(shù) 內(nèi)容vADO.NET基礎(chǔ)基礎(chǔ) v連接模式數(shù)據(jù)庫訪問連接模式數(shù)據(jù)庫訪問 v斷開模式數(shù)據(jù)庫訪問斷開模式數(shù)據(jù)庫訪問 8.1 ADO.NET基礎(chǔ)基礎(chǔ)vADO.NET模型模型vADO.NET的組件的組件 vADO.NET的數(shù)據(jù)訪問模式的數(shù)據(jù)訪問模式 8.1.1 ADO.NET模型模型8.1.2 ADO.NET的組件的組件v數(shù)據(jù)集數(shù)據(jù)集DataSet位于位于System.Data命名空間下,用于在命名空間下,用于在內(nèi)存中暫存數(shù)據(jù),可以把它看成是內(nèi)存中的小型數(shù)據(jù)庫。內(nèi)存中暫存數(shù)據(jù),可以把它看成是內(nèi)存中的小型數(shù)據(jù)庫。DataSet包含一個或多個數(shù)據(jù)表(包
2、含一個或多個數(shù)據(jù)表(DataTable),表數(shù)),表數(shù)據(jù)可來自數(shù)據(jù)庫、文件或據(jù)可來自數(shù)據(jù)庫、文件或XML數(shù)據(jù)。數(shù)據(jù)。 vDataSet一旦讀取到數(shù)據(jù)庫中的數(shù)據(jù)后,就在內(nèi)存中建一旦讀取到數(shù)據(jù)庫中的數(shù)據(jù)后,就在內(nèi)存中建立數(shù)據(jù)庫的副本,在此之后的所有操作都是在內(nèi)存中的立數(shù)據(jù)庫的副本,在此之后的所有操作都是在內(nèi)存中的DataSet中完成,直到執(zhí)行更新命令為止。中完成,直到執(zhí)行更新命令為止。 v在在ADO.NET中,連接數(shù)據(jù)源有中,連接數(shù)據(jù)源有4種數(shù)據(jù)提供程序。種數(shù)據(jù)提供程序。如果要在應(yīng)用程序中使用任何一種數(shù)據(jù)提供程序,如果要在應(yīng)用程序中使用任何一種數(shù)據(jù)提供程序,必須在后臺代碼中引用對應(yīng)的命名空間,類的
3、名稱必須在后臺代碼中引用對應(yīng)的命名空間,類的名稱也隨之變化。也隨之變化。 8.1.3 ADO.NET的數(shù)據(jù)訪問模式的數(shù)據(jù)訪問模式8.2 連接模式數(shù)據(jù)庫訪問連接模式數(shù)據(jù)庫訪問v使用使用SqlConnection對象連接數(shù)據(jù)庫對象連接數(shù)據(jù)庫 v使用使用SqlCommand對象執(zhí)行數(shù)據(jù)庫命令對象執(zhí)行數(shù)據(jù)庫命令 v使用使用SqlDataReader讀取數(shù)據(jù)讀取數(shù)據(jù) v為為SqlCommand傳遞參數(shù)傳遞參數(shù) v使用使用SqlCommand執(zhí)行存儲過程執(zhí)行存儲過程v使用事務(wù)處理使用事務(wù)處理 連接模式訪問數(shù)據(jù)庫的開發(fā)流程有以下幾個步驟:連接模式訪問數(shù)據(jù)庫的開發(fā)流程有以下幾個步驟:v創(chuàng)建創(chuàng)建SqlConne
4、ction對象與數(shù)據(jù)庫建立連接;對象與數(shù)據(jù)庫建立連接;v創(chuàng)建創(chuàng)建SqlCommand對象對數(shù)據(jù)庫執(zhí)行對象對數(shù)據(jù)庫執(zhí)行SQL命令或命令或存儲過程,包括增、刪、改及查詢數(shù)據(jù)庫等命令;存儲過程,包括增、刪、改及查詢數(shù)據(jù)庫等命令;v如果查詢數(shù)據(jù)庫的數(shù)據(jù),則創(chuàng)建如果查詢數(shù)據(jù)庫的數(shù)據(jù),則創(chuàng)建SqlDataReader對對象讀取象讀取SqlCommand命令查詢到的結(jié)果集,并將查命令查詢到的結(jié)果集,并將查到的結(jié)果集綁定到控件上。到的結(jié)果集綁定到控件上。8.2.1 使用使用SqlConnection對象連接對象連接數(shù)據(jù)庫數(shù)據(jù)庫1示例數(shù)據(jù)庫的創(chuàng)建示例數(shù)據(jù)庫的創(chuàng)建 創(chuàng)建一個示例數(shù)據(jù)庫創(chuàng)建一個示例數(shù)據(jù)庫Studen
5、t,該數(shù)據(jù)庫包含,該數(shù)據(jù)庫包含StuInfo、Major和和UserInfo三張表,數(shù)據(jù)庫三張表,數(shù)據(jù)庫表結(jié)構(gòu)關(guān)系圖。表結(jié)構(gòu)關(guān)系圖?!纠纠?-1】演示如何在】演示如何在Visual Studio 2010開發(fā)環(huán)境開發(fā)環(huán)境下創(chuàng)建數(shù)據(jù)庫。下創(chuàng)建數(shù)據(jù)庫。 參見示例參見示例第第08章章SqlServerDemoStudent.mdf 2創(chuàng)建數(shù)據(jù)庫連接創(chuàng)建數(shù)據(jù)庫連接操作數(shù)據(jù)庫的第一步是建立與數(shù)據(jù)庫的連接,因此首操作數(shù)據(jù)庫的第一步是建立與數(shù)據(jù)庫的連接,因此首先要創(chuàng)建先要創(chuàng)建SqlConnection對象。要創(chuàng)建對象。要創(chuàng)建SqlConnection對對象必須先了解象必須先了解SqlConnection對
6、象的常用屬性和方法。對象的常用屬性和方法。SqlConnection對象的常用屬性對象的常用屬性vConnectionString屬性通常包含以下參數(shù),各參數(shù)屬性通常包含以下參數(shù),各參數(shù)間用間用“;”分隔。分隔。Provider:用于設(shè)置數(shù)據(jù)源的:用于設(shè)置數(shù)據(jù)源的OLE DB驅(qū)動程序。驅(qū)動程序。如:如:Access為為“Microsoft.Jet.OLEDB.4.0”;SQL Server 6.5或之前版本為或之前版本為“SQLOLEDB”。Data Source:設(shè)置數(shù)據(jù)源的實際路徑。:設(shè)置數(shù)據(jù)源的實際路徑。Password:設(shè)置登錄數(shù)據(jù)庫所使用的密碼。:設(shè)置登錄數(shù)據(jù)庫所使用的密碼。User
7、 ID:設(shè)置登錄數(shù)據(jù)庫時所使用的帳號:設(shè)置登錄數(shù)據(jù)庫時所使用的帳號。例如,連接例如,連接Access數(shù)據(jù)庫的的連接參數(shù)為:數(shù)據(jù)庫的的連接參數(shù)為:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:abc.mdbv對于對于SQL7.0或更高版本的或更高版本的SQL數(shù)據(jù)庫,數(shù)據(jù)庫,ConnectionString屬性包含的主要參數(shù)有:屬性包含的主要參數(shù)有:Data Source或或Server:設(shè)置需連接的數(shù)據(jù)庫服務(wù)器名稱。:設(shè)置需連接的數(shù)據(jù)庫服務(wù)器名稱。Initial Catalog或或Database:設(shè)置連接的數(shù)據(jù)庫名稱。:設(shè)置連接的數(shù)據(jù)庫名稱。At
8、tachDBFilename:數(shù)據(jù)庫的路徑和文件名。:數(shù)據(jù)庫的路徑和文件名。User ID 或或 uid:登錄:登錄SQL Server數(shù)據(jù)庫的賬戶。數(shù)據(jù)庫的賬戶。Password 或或 pwd:登錄:登錄SQL Server數(shù)據(jù)庫的密碼。數(shù)據(jù)庫的密碼。Integrated Security:是否使用:是否使用Windows集成身份驗證,集成身份驗證,值有三種:值有三種:true、false和和SSPI,true和和SSPI表示使用表示使用Windows集成身份驗證。集成身份驗證。Connection Timeout:設(shè)置:設(shè)置SqlConnection對象連接對象連接SQL數(shù)據(jù)庫服務(wù)器的超時
9、時間,單位為秒,若在所設(shè)置的時間內(nèi)數(shù)據(jù)庫服務(wù)器的超時時間,單位為秒,若在所設(shè)置的時間內(nèi)無法連接數(shù)據(jù)庫,則返回失敗信息。默認(rèn)為無法連接數(shù)據(jù)庫,則返回失敗信息。默認(rèn)為15秒。秒。v連接數(shù)據(jù)庫時,有兩種驗證模式:連接數(shù)據(jù)庫時,有兩種驗證模式:混合驗證模式混合驗證模式Windows集成驗證模式集成驗證模式v使用混合驗證模式的連接參數(shù)為:使用混合驗證模式的連接參數(shù)為:Data Source =localhost; Initial Catalog=northwind; User Id=sa;pwd=123其中,其中,Data Source =localhost表示連接本機(jī)表示連接本機(jī)SQL數(shù)數(shù)據(jù)庫的默認(rèn)服
10、務(wù)器。據(jù)庫的默認(rèn)服務(wù)器。v使用使用Windows集成驗證模式的連接參數(shù)為:集成驗證模式的連接參數(shù)為: Data Source =localhost; Initial Catalog=northwind; Integrated Security=truev混合驗證模式必須在連接字符串中以明文形式保存混合驗證模式必須在連接字符串中以明文形式保存用戶名和密碼,因此安全性較差。用戶名和密碼,因此安全性較差。Windows集成驗集成驗證模式不發(fā)送用戶名和密碼;僅發(fā)送用戶通過身份證模式不發(fā)送用戶名和密碼;僅發(fā)送用戶通過身份驗證的信息。從安全角度考慮,建議使用驗證的信息。從安全角度考慮,建議使用Window
11、s集成驗證模式。集成驗證模式。v在本書的示例中,數(shù)據(jù)庫都是放在網(wǎng)站的在本書的示例中,數(shù)據(jù)庫都是放在網(wǎng)站的App_Data目錄下。如例【目錄下。如例【8-1】中創(chuàng)建的】中創(chuàng)建的Student數(shù)據(jù)庫的連接參數(shù)應(yīng)設(shè)置為:數(shù)據(jù)庫的連接參數(shù)應(yīng)設(shè)置為:Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory|Student.mdf;Integrated Security=True;User Instance=Truev其中,其中,Data Source=.SQLEXPRESS表示表示SQL Server2005的的SQLEXPRESS數(shù)據(jù)庫服務(wù)器,數(shù)
12、據(jù)庫服務(wù)器,AttachDbFilename表示數(shù)據(jù)庫的路徑和文件名,表示數(shù)據(jù)庫的路徑和文件名,|DataDirectory|表示網(wǎng)站默認(rèn)數(shù)據(jù)庫路徑表示網(wǎng)站默認(rèn)數(shù)據(jù)庫路徑App_Data。SqlConnection對象的常用方法對象的常用方法v在創(chuàng)建數(shù)據(jù)庫連接對象時,需要指定連接字符串。通常在創(chuàng)建數(shù)據(jù)庫連接對象時,需要指定連接字符串。通常有以下有以下2種方法獲取連接字符串:種方法獲取連接字符串:創(chuàng)建連接對象,并在應(yīng)用程序的中硬編碼連接字符創(chuàng)建連接對象,并在應(yīng)用程序的中硬編碼連接字符串。串。SqlConnection 對象名稱對象名稱 = new SqlConnection(連接連接字符串字符串
13、);或或SqlConnection 對象名稱對象名稱 = new SqlConnection( );對象名稱對象名稱. ConnectionString=連接字符串連接字符串;v把連接字符串放在應(yīng)用程序的把連接字符串放在應(yīng)用程序的web.config文件中,文件中,再引用再引用web.config文件。文件。在在web.config配置文件的配置文件的節(jié)中節(jié)中添加如下的代碼。添加如下的代碼。 vweb.config文件中有了連接字符串后,就可以從文件中有了連接字符串后,就可以從web.config中讀取連接字符串。需要使用中讀取連接字符串。需要使用System.Configuration.Co
14、nfigurationManager類類讀取連接字符串。代碼如下:讀取連接字符串。代碼如下:string strCnn= ConfigurationManager.ConnectionStringsStudentCnnString.ConnectionString;/讀取連接字符串讀取連接字符串SqlConnection cnn = new SqlConnection(strCnn);/定義連接對象定義連接對象為了使上述代碼正常工作,必須使用為了使上述代碼正常工作,必須使用using System.Configuration語句引入命名空間。語句引入命名空間。v創(chuàng)建好創(chuàng)建好SqlConnect
15、ion連接對象后,并沒有與數(shù)據(jù)連接對象后,并沒有與數(shù)據(jù)庫建立連接,要建立數(shù)據(jù)庫連接,還必須使用庫建立連接,要建立數(shù)據(jù)庫連接,還必須使用cnn.Open()方法打開數(shù)據(jù)連接,然后才可以對數(shù)據(jù)方法打開數(shù)據(jù)連接,然后才可以對數(shù)據(jù)庫進(jìn)行各種操作。操作完數(shù)據(jù)庫后,一定要使用庫進(jìn)行各種操作。操作完數(shù)據(jù)庫后,一定要使用cnn.Close()方法關(guān)閉連接。方法關(guān)閉連接。.【例【例8-2】演示如何建立】演示如何建立Student數(shù)據(jù)庫的連接。數(shù)據(jù)庫的連接。參見示例參見示例第第08章章SqlServerDemoConnectionDemo.aspx 8.2.2 使用使用SqlCommand對象執(zhí)行數(shù)對象執(zhí)行數(shù)據(jù)庫
16、命令據(jù)庫命令v成功連接數(shù)據(jù)庫后,接著就可以使用成功連接數(shù)據(jù)庫后,接著就可以使用SqlCommand對象對數(shù)據(jù)庫進(jìn)行各種操作,如讀取、寫入、修改對象對數(shù)據(jù)庫進(jìn)行各種操作,如讀取、寫入、修改和刪除等操作。和刪除等操作。SqlCommand對象的常用屬性對象的常用屬性v建立建立SqlCommand對象的方法有對象的方法有4種:種:SqlCommand 對象名對象名 = new SqlCommand();SqlCommand 對象名對象名 = new SqlCommand(SQL命令命令);SqlCommand 對象名對象名= new SqlCommand(SQL命令命令 , 連接對象連接對象);Sq
17、lCommand 對象名對象名= new SqlCommand(SQL命令命令 , 連接對象連接對象 , 事務(wù)對象事務(wù)對象);SqlCommand對象的常用方法對象的常用方法1.ExecuteNonQuery方法方法ExecuteNonQuery方法只能執(zhí)行方法只能執(zhí)行Insert、Update和和Delete命令,因此可以增加、修改和刪除數(shù)據(jù)庫中的命令,因此可以增加、修改和刪除數(shù)據(jù)庫中的數(shù)據(jù)。增加、修改和刪除數(shù)據(jù)庫中的數(shù)據(jù)的步驟相同,數(shù)據(jù)。增加、修改和刪除數(shù)據(jù)庫中的數(shù)據(jù)的步驟相同,具體描述如下:具體描述如下:創(chuàng)建創(chuàng)建SqlConnection對象,設(shè)置連接字符串;對象,設(shè)置連接字符串;創(chuàng)建創(chuàng)
18、建SqlCommand對象,設(shè)置它的對象,設(shè)置它的Connection和和CommandText屬性,分別表示數(shù)據(jù)庫連接和屬性,分別表示數(shù)據(jù)庫連接和需要執(zhí)行的需要執(zhí)行的SQL命令。命令。打開與數(shù)據(jù)庫連接;打開與數(shù)據(jù)庫連接;使用使用SqlCommand對象的對象的ExecuteNonQuery方法執(zhí)行方法執(zhí)行CommandText中的命令;并根據(jù)中的命令;并根據(jù)返回返回值判斷是否對數(shù)據(jù)庫操作成功。值判斷是否對數(shù)據(jù)庫操作成功。 關(guān)閉與數(shù)據(jù)庫連接;關(guān)閉與數(shù)據(jù)庫連接;【例【例8-3】演示如何使用】演示如何使用ExecuteNonQuery方法增加方法增加Student數(shù)據(jù)庫中數(shù)據(jù)庫中UserInfo表
19、的用戶信息。表的用戶信息。參見示例參見示例第第08章章SqlServerDemoCommand_InsertDemo.aspx 【例【例8-4】演示如何使用】演示如何使用ExecuteNonQuery方法修改方法修改Student數(shù)據(jù)庫中數(shù)據(jù)庫中UserInfo表的用戶信息。表的用戶信息。參見示例參見示例第第08章章SqlServerDemoCommand_UpdateDemo.aspx 【例【例8-5】演示如何使用】演示如何使用ExecuteNonQuery方法刪除方法刪除Student數(shù)據(jù)庫中數(shù)據(jù)庫中UserInfo表的用戶信息。表的用戶信息。參見示例參見示例第第08章章SqlServer
20、DemoCommand_DeleteDemo.aspx 2. ExecuteScalar方法方法vExecuteScalar方法一般用來執(zhí)行查詢單值的方法一般用來執(zhí)行查詢單值的Select命令,它以命令,它以object類型返回結(jié)果表第一行類型返回結(jié)果表第一行第一列的值。對數(shù)據(jù)庫操作時,具體步驟如下:第一列的值。對數(shù)據(jù)庫操作時,具體步驟如下:創(chuàng)建創(chuàng)建SqlConnection對象,設(shè)置連接字符串;對象,設(shè)置連接字符串;創(chuàng)建創(chuàng)建SqlCommand對象,設(shè)置它的對象,設(shè)置它的Connection和和CommandText屬性;屬性;打開與數(shù)據(jù)庫連接;打開與數(shù)據(jù)庫連接;使用使用SqlCommand
21、對象的對象的ExecuteScalar方法方法執(zhí)行執(zhí)行CommandText中的命令;并返回結(jié)果表中的命令;并返回結(jié)果表第一行第一列的值供應(yīng)用程序使用第一行第一列的值供應(yīng)用程序使用。關(guān)閉與數(shù)據(jù)庫連接;關(guān)閉與數(shù)據(jù)庫連接;【例【例8-6】演示如何使用】演示如何使用ExecuteScalar方法查詢方法查詢Student數(shù)據(jù)庫中數(shù)據(jù)庫中StuInfo表的學(xué)生人數(shù)。表的學(xué)生人數(shù)。參見示例參見示例第第08章章SqlServerDemoCommand_ExecuteScalar.aspx 8.2.3 使用使用SqlDataReader讀取數(shù)據(jù)讀取數(shù)據(jù)vSqlDataReader對象是一個向前只讀的記錄指針
22、,用對象是一個向前只讀的記錄指針,用于快速讀取數(shù)據(jù)。對于只需要順序顯示數(shù)據(jù)表中記錄于快速讀取數(shù)據(jù)。對于只需要順序顯示數(shù)據(jù)表中記錄的應(yīng)用而言,的應(yīng)用而言,SqlDataReader對象是比較理想的選擇。對象是比較理想的選擇。v在讀取數(shù)據(jù)時,它需要與數(shù)據(jù)源保持實時連接,以循在讀取數(shù)據(jù)時,它需要與數(shù)據(jù)源保持實時連接,以循環(huán)的方式讀取結(jié)果集中的數(shù)據(jù)。這個對象不能直接實環(huán)的方式讀取結(jié)果集中的數(shù)據(jù)。這個對象不能直接實例化,而必須調(diào)用例化,而必須調(diào)用SqlCommand對象的對象的ExecuteReader方法才能創(chuàng)建有效的方法才能創(chuàng)建有效的SqlDataReader對象。對象。SqlDataReader對
23、象一旦創(chuàng)建,即可通過對象對象一旦創(chuàng)建,即可通過對象的屬性、方法訪問數(shù)據(jù)源中的數(shù)據(jù)。的屬性、方法訪問數(shù)據(jù)源中的數(shù)據(jù)。vSqlDataReader對象的常用屬性:對象的常用屬性:FieldCount:獲取由:獲取由SqlDataReader得到的一行得到的一行數(shù)據(jù)中的字段數(shù)。數(shù)據(jù)中的字段數(shù)。isClosed:獲?。韩@取SqlDataReader對象的狀態(tài)。對象的狀態(tài)。true表示關(guān)閉,表示關(guān)閉,false表示打開。表示打開。HasRows:表示:表示SqlDataReader是否包含數(shù)據(jù)。是否包含數(shù)據(jù)。SqlDataReader對象的常用方法:對象的常用方法:Close()方法:不帶參數(shù),無返回值
24、,用來關(guān)閉方法:不帶參數(shù),無返回值,用來關(guān)閉SqlDataReader對象。對象。Read()方法:讓記錄指針指向本結(jié)果集中的下一條記錄,返回值是方法:讓記錄指針指向本結(jié)果集中的下一條記錄,返回值是true或或false。NextResult()方法:當(dāng)返回多個結(jié)果集時,使用該方法讓記錄指針指向方法:當(dāng)返回多個結(jié)果集時,使用該方法讓記錄指針指向下一個結(jié)果集。當(dāng)調(diào)用該方法獲得下一個結(jié)果集后,依然要用下一個結(jié)果集。當(dāng)調(diào)用該方法獲得下一個結(jié)果集后,依然要用Read方法方法來遍歷訪問該結(jié)果集。來遍歷訪問該結(jié)果集。GetValue(int i)方法:根據(jù)傳入的列的索引值,返回當(dāng)前記錄行里指定方法:根據(jù)傳
25、入的列的索引值,返回當(dāng)前記錄行里指定列的值。由于事先無法預(yù)知返回列的數(shù)據(jù)類型,所以該方法使用列的值。由于事先無法預(yù)知返回列的數(shù)據(jù)類型,所以該方法使用Object類型來接收返回數(shù)據(jù)。類型來接收返回數(shù)據(jù)。GetValues (Object values)方法:該方法會把當(dāng)前記錄行里所有的數(shù)方法:該方法會把當(dāng)前記錄行里所有的數(shù)據(jù)保存到一個數(shù)組里??梢允褂脫?jù)保存到一個數(shù)組里??梢允褂肍ieldCount屬性來獲知記錄里字段的總屬性來獲知記錄里字段的總數(shù),據(jù)此定義接收返回值的數(shù)組長度。數(shù),據(jù)此定義接收返回值的數(shù)組長度。GetDataTypeName(int i)方法:通過輸入列索引,獲得該列的類型。方法
26、:通過輸入列索引,獲得該列的類型。GetName(int i)方法:通過輸入列索引,獲得該列的名稱。綜合使用方法:通過輸入列索引,獲得該列的名稱。綜合使用GetName和和GetValue兩方法,可以獲得數(shù)據(jù)表里列名和列的字段。兩方法,可以獲得數(shù)據(jù)表里列名和列的字段。IsDBNull(int i)方法:判斷指定索引號的列的值是否為空,返回方法:判斷指定索引號的列的值是否為空,返回True或或False。v使用使用SqlDataReader對象查詢數(shù)據(jù)庫的一般步驟:對象查詢數(shù)據(jù)庫的一般步驟:創(chuàng)建創(chuàng)建SqlConnection對象,設(shè)置連接字符串;對象,設(shè)置連接字符串;創(chuàng)建創(chuàng)建SqlCommand
27、對象,設(shè)置它的對象,設(shè)置它的Connection和和CommandText屬性,分別表示數(shù)據(jù)庫連接和需要執(zhí)行屬性,分別表示數(shù)據(jù)庫連接和需要執(zhí)行的的SQL命令。命令。打開與數(shù)據(jù)庫連接;打開與數(shù)據(jù)庫連接;使用使用SqlCommand對象的對象的ExecuteReader方法執(zhí)行方法執(zhí)行CommandText中的命令;并把返回的結(jié)果放在中的命令;并把返回的結(jié)果放在SqlDataReader對象中對象中。通過循環(huán),處理數(shù)據(jù)庫查詢結(jié)果。通過循環(huán),處理數(shù)據(jù)庫查詢結(jié)果。關(guān)閉與數(shù)據(jù)庫連接;關(guān)閉與數(shù)據(jù)庫連接;【例【例8-7】演示如何使用】演示如何使用SqlDataReader對象讀取對象讀取StuInfo表的記
28、錄。表的記錄。參見示例參見示例第第08章章SqlServerDemoDataReaderDemo.aspx v使用使用SqlDataReader對象時,應(yīng)注意以下幾點(diǎn):對象時,應(yīng)注意以下幾點(diǎn):v讀取數(shù)據(jù)時,讀取數(shù)據(jù)時,SqlConnection對象必須處于打?qū)ο蟊仨毺幱诖蜷_狀態(tài)。開狀態(tài)。v必須通過必須通過SqlCommand對象的對象的ExecuteReader()方法,產(chǎn)生方法,產(chǎn)生SqlDataReader對象的實例。對象的實例。v只能按向下的順序逐條讀取記錄,不能隨機(jī)讀只能按向下的順序逐條讀取記錄,不能隨機(jī)讀取。且無法直接獲知讀取記錄的總數(shù)。取。且無法直接獲知讀取記錄的總數(shù)。SqlDat
29、aReader對象管理的查詢結(jié)果是只讀的,對象管理的查詢結(jié)果是只讀的,不能修改。不能修改。在在Visual Studio 2010的的Web應(yīng)用程序中,提供了大量列表綁應(yīng)用程序中,提供了大量列表綁定控件,如定控件,如DropDownList、ListBox和和GridView控件等,可以控件等,可以直接將直接將SqlDataReader對象綁定到這些控件來顯示查詢結(jié)果。對象綁定到這些控件來顯示查詢結(jié)果。與控件綁定時,主要設(shè)置控件的以下屬性和方法:與控件綁定時,主要設(shè)置控件的以下屬性和方法:DataSource屬性:設(shè)置控件的數(shù)據(jù)源,可以是屬性:設(shè)置控件的數(shù)據(jù)源,可以是SqlDataReader
30、對象,也可以是對象,也可以是DataSet對象。對象。DataMember屬性:當(dāng)數(shù)據(jù)源為屬性:當(dāng)數(shù)據(jù)源為DataSet對象時,設(shè)置控件對象時,設(shè)置控件要顯示的數(shù)據(jù)表名。要顯示的數(shù)據(jù)表名。DataTextField屬性:對于綁定屬性:對于綁定DropDownList、ListBox等控件時,設(shè)置顯示數(shù)據(jù)的字段名稱。等控件時,設(shè)置顯示數(shù)據(jù)的字段名稱。DataValueField屬性:對于綁定屬性:對于綁定DropDownList、ListBox等控件時,設(shè)置隱藏值的字段名稱。等控件時,設(shè)置隱藏值的字段名稱。DataBind方法:設(shè)置完控件的綁定屬性后,調(diào)用該方法將方法:設(shè)置完控件的綁定屬性后,調(diào)
31、用該方法將數(shù)據(jù)綁定到控件上。數(shù)據(jù)綁定到控件上?!纠纠?-8】演示如何將】演示如何將SqlDataReder對象與對象與DropDownList控件綁定。本示例主要在控件綁定。本示例主要在DropDownList控件中顯示控件中顯示Major表的記錄。表的記錄。參見示例參見示例第第08章章SqlServerDemoDataReader_DataBind.aspx 8.2.4 為為SqlCommand傳遞參數(shù)傳遞參數(shù)【例例8-9】演示如何創(chuàng)建一個登錄頁面。演示如何創(chuàng)建一個登錄頁面。 參見示例參見示例第第08章章SqlServerDemoLogin.aspx 【例【例8-10】下面演示如何使用參數(shù)
32、化的方法安全登錄網(wǎng)站?!肯旅嫜菔救绾问褂脜?shù)化的方法安全登錄網(wǎng)站。參見示例參見示例第第08章章SqlServerDemoLogin.aspx 8.2.5 使用使用SqlCommand執(zhí)行存儲過程執(zhí)行存儲過程存儲過程是存儲過程是SQL語句和可選控制流語句的預(yù)編譯集合,以語句和可選控制流語句的預(yù)編譯集合,以一個名稱存儲并作為一個單元處理。對于大中型的應(yīng)用程序一個名稱存儲并作為一個單元處理。對于大中型的應(yīng)用程序中,使用存儲過程具有下列優(yōu)點(diǎn):中,使用存儲過程具有下列優(yōu)點(diǎn):一次創(chuàng)建和測試好后,可以多次供應(yīng)用程序調(diào)用一次創(chuàng)建和測試好后,可以多次供應(yīng)用程序調(diào)用數(shù)據(jù)庫人員和數(shù)據(jù)庫人員和Web應(yīng)用程序開發(fā)人員可
33、以獨(dú)立地工作,簡應(yīng)用程序開發(fā)人員可以獨(dú)立地工作,簡化了分工?;朔止?。Web應(yīng)用程序和開發(fā)人員不直接訪問數(shù)據(jù)庫,提高了數(shù)據(jù)應(yīng)用程序和開發(fā)人員不直接訪問數(shù)據(jù)庫,提高了數(shù)據(jù)庫的安全性。庫的安全性。存儲過程在創(chuàng)建時即在服務(wù)器上進(jìn)行預(yù)編譯,因此具有較存儲過程在創(chuàng)建時即在服務(wù)器上進(jìn)行預(yù)編譯,因此具有較高的執(zhí)行效率。高的執(zhí)行效率。一個存儲過程可以執(zhí)行上百條一個存儲過程可以執(zhí)行上百條SQL語句,降低網(wǎng)絡(luò)通信量。語句,降低網(wǎng)絡(luò)通信量。存儲過程或數(shù)據(jù)庫結(jié)構(gòu)的更改不會影響應(yīng)用程序,具有一存儲過程或數(shù)據(jù)庫結(jié)構(gòu)的更改不會影響應(yīng)用程序,具有一定的靈活性。定的靈活性。存儲過程按返回值的情況,同樣分為存儲過程按返回值的情況
34、,同樣分為3種:返回記錄的存儲種:返回記錄的存儲過程;返回單個值的存儲過程;執(zhí)行操作的存儲過程。使用過程;返回單個值的存儲過程;執(zhí)行操作的存儲過程。使用SqlCommand對象執(zhí)行存儲過程與執(zhí)行對象執(zhí)行存儲過程與執(zhí)行SQL語句一樣,分為語句一樣,分為以下以下3種情況。種情況。返回記錄的存儲過程返回記錄的存儲過程:使用:使用SqlCommand對象的對象的ExecuteReader方法執(zhí)行,并從數(shù)據(jù)庫中獲取查詢結(jié)果集。方法執(zhí)行,并從數(shù)據(jù)庫中獲取查詢結(jié)果集。返回標(biāo)量值的存儲過程返回標(biāo)量值的存儲過程:使用:使用SqlCommand對象的對象的ExecuteScalar方法執(zhí)行,并從數(shù)據(jù)庫中檢索單個值
35、方法執(zhí)行,并從數(shù)據(jù)庫中檢索單個值執(zhí)行操作的存儲過程執(zhí)行操作的存儲過程:使用:使用SqlCommand對象的對象的ExecuteNoQuery方法執(zhí)行,并返回受影響的記錄數(shù)。方法執(zhí)行,并返回受影響的記錄數(shù)?!纠纠?-11】演示如何使用存儲過程的方法安】演示如何使用存儲過程的方法安全登錄網(wǎng)站。全登錄網(wǎng)站。參見示例參見示例第第08章章SqlServerDemoLogin.aspx 8.2.6 使用事務(wù)處理使用事務(wù)處理v在在.Net中,事務(wù)處理機(jī)制共有中,事務(wù)處理機(jī)制共有4種:種:數(shù)據(jù)庫事務(wù)數(shù)據(jù)庫事務(wù)ADO.NET事務(wù)事務(wù)ASP.NET事務(wù)事務(wù)企業(yè)服務(wù)級事務(wù)企業(yè)服務(wù)級事務(wù)【例【例8-12】下面演示如
36、何使用】下面演示如何使用ADO.NET事務(wù)。在事務(wù)。在Student數(shù)據(jù)庫中,刪除數(shù)據(jù)庫中,刪除Major表的專業(yè)記錄的同時,表的專業(yè)記錄的同時,希望在希望在StuInfo表中刪除該專業(yè)的學(xué)生記錄。表中刪除該專業(yè)的學(xué)生記錄。參見示例參見示例第第08章章SqlServerDemoTransactionDemo.aspx 8.3 斷開模式數(shù)據(jù)庫訪問斷開模式數(shù)據(jù)庫訪問vDataSet數(shù)據(jù)集數(shù)據(jù)集 v使用使用SqlDataAdapter對象執(zhí)行數(shù)據(jù)庫命令對象執(zhí)行數(shù)據(jù)庫命令 v斷開模式訪問數(shù)據(jù)庫的開發(fā)流程有以下幾個步驟:斷開模式訪問數(shù)據(jù)庫的開發(fā)流程有以下幾個步驟:v創(chuàng)建創(chuàng)建SqlConnection對象
37、與數(shù)據(jù)庫建立連接;對象與數(shù)據(jù)庫建立連接;v創(chuàng)建創(chuàng)建SqlDataAdapter對象對數(shù)據(jù)庫執(zhí)行對象對數(shù)據(jù)庫執(zhí)行SQL命令命令或存儲過程,包括增、刪、改及查詢數(shù)據(jù)庫等命令;或存儲過程,包括增、刪、改及查詢數(shù)據(jù)庫等命令;如果查詢數(shù)據(jù)庫的數(shù)據(jù),則使用如果查詢數(shù)據(jù)庫的數(shù)據(jù),則使用SqlDataAdapter的的Fill方法填充方法填充DataSet;如果是對數(shù)據(jù)庫進(jìn)行增、;如果是對數(shù)據(jù)庫進(jìn)行增、刪、改操作,首先要對刪、改操作,首先要對DataSet對象進(jìn)行更新,然對象進(jìn)行更新,然后使用后使用SqlDataAdapter的的Update方法將方法將DataSet中的修改內(nèi)容更新到數(shù)據(jù)庫中。使用中的修改內(nèi)
38、容更新到數(shù)據(jù)庫中。使用SqlDataAdapter對數(shù)據(jù)庫的操作過程中,連接的對數(shù)據(jù)庫的操作過程中,連接的打開和關(guān)閉是自動完成的,無需手動編碼。打開和關(guān)閉是自動完成的,無需手動編碼。斷開模式訪問數(shù)據(jù)庫斷開模式訪問數(shù)據(jù)庫 8.3.1 DataSet數(shù)據(jù)集數(shù)據(jù)集vDataSet是是ADO.NET的核心組建之一,位于的核心組建之一,位于System.Data命名空間下,是一個內(nèi)存中的小型數(shù)據(jù)庫。命名空間下,是一個內(nèi)存中的小型數(shù)據(jù)庫。v數(shù)據(jù)集是包含數(shù)據(jù)表的對象,可以在這些數(shù)據(jù)表中臨時數(shù)據(jù)集是包含數(shù)據(jù)表的對象,可以在這些數(shù)據(jù)表中臨時存儲數(shù)據(jù)以便在應(yīng)用程序中使用。存儲數(shù)據(jù)以便在應(yīng)用程序中使用。v如果應(yīng)用程
39、序要求使用數(shù)據(jù),則可以將該數(shù)據(jù)加載到數(shù)如果應(yīng)用程序要求使用數(shù)據(jù),則可以將該數(shù)據(jù)加載到數(shù)據(jù)集中,數(shù)據(jù)集在本地內(nèi)存中為應(yīng)用程序提供了待用數(shù)據(jù)集中,數(shù)據(jù)集在本地內(nèi)存中為應(yīng)用程序提供了待用數(shù)據(jù)的緩存。即使應(yīng)用程序從數(shù)據(jù)庫斷開連接,也可以使據(jù)的緩存。即使應(yīng)用程序從數(shù)據(jù)庫斷開連接,也可以使用數(shù)據(jù)集中的數(shù)據(jù)。用數(shù)據(jù)集中的數(shù)據(jù)。v數(shù)據(jù)集維護(hù)有關(guān)其數(shù)據(jù)更改的信息,因此可以跟蹤數(shù)據(jù)數(shù)據(jù)集維護(hù)有關(guān)其數(shù)據(jù)更改的信息,因此可以跟蹤數(shù)據(jù)更新,并在應(yīng)用程序重新連接時將更新發(fā)送回數(shù)據(jù)庫。更新,并在應(yīng)用程序重新連接時將更新發(fā)送回數(shù)據(jù)庫。 DataSet對象的結(jié)構(gòu)模型圖對象的結(jié)構(gòu)模型圖 v數(shù)據(jù)集可以分為類型化和非類型化兩種數(shù)據(jù)集
40、。數(shù)據(jù)集可以分為類型化和非類型化兩種數(shù)據(jù)集。v類型化數(shù)據(jù)集是繼承自類型化數(shù)據(jù)集是繼承自DataSet類,通過類,通過“數(shù)據(jù)集數(shù)據(jù)集設(shè)計器設(shè)計器”創(chuàng)建一個新的強(qiáng)類型數(shù)據(jù)集類。其架構(gòu)信創(chuàng)建一個新的強(qiáng)類型數(shù)據(jù)集類。其架構(gòu)信息如表、行、列等都已內(nèi)置。由于類型化數(shù)據(jù)集繼息如表、行、列等都已內(nèi)置。由于類型化數(shù)據(jù)集繼承自承自DataSet類,因此類型化數(shù)據(jù)集具有類,因此類型化數(shù)據(jù)集具有DataSet類類的所有功能。的所有功能。v非類型化數(shù)據(jù)集沒有相應(yīng)的內(nèi)置架構(gòu)。與類型化數(shù)非類型化數(shù)據(jù)集沒有相應(yīng)的內(nèi)置架構(gòu)。與類型化數(shù)據(jù)集一樣,非類型化數(shù)據(jù)集也包含表、列等,但它據(jù)集一樣,非類型化數(shù)據(jù)集也包含表、列等,但它們只作
41、為集合公開。們只作為集合公開。1數(shù)據(jù)集(數(shù)據(jù)集(DataSet)對象創(chuàng)建)對象創(chuàng)建創(chuàng)建創(chuàng)建DataSet的語法格式為:的語法格式為:DataSet 對象名對象名 = new DataSet();或或DataSet 對象名對象名 = new DataSet(數(shù)據(jù)集名數(shù)據(jù)集名);例如,創(chuàng)建數(shù)據(jù)集對象例如,創(chuàng)建數(shù)據(jù)集對象dsStu,代碼如下:,代碼如下:DataSet dsStu = new DataSet();或或DataSet dsStu = new DataSet(Student);DataSet對象的常用屬性和方法對象的常用屬性和方法2數(shù)據(jù)表(數(shù)據(jù)表(DataTable)對象的創(chuàng)建)對象的創(chuàng)
42、建DataSet中的每個數(shù)據(jù)表都是一個中的每個數(shù)據(jù)表都是一個DataTable對象。對象。定義定義DataTable對象的語法格式為:對象的語法格式為:DataTable 對象名對象名 = new DataTable();或或DataTable 對象名對象名 = new DataTable(數(shù)據(jù)表名數(shù)據(jù)表名);例如,創(chuàng)建數(shù)據(jù)表對象例如,創(chuàng)建數(shù)據(jù)表對象dtStu,代碼如下:,代碼如下:DataTable dtStuInfo = new DataTable();dtStuInfo.TableName=StuInfo;或或DataTable dtStuInfo = new DataTable(Stu
43、Info);DataTable對象的常用屬性和方法對象的常用屬性和方法v創(chuàng)建好的數(shù)據(jù)表對象,可以添加到數(shù)據(jù)集對象中,創(chuàng)建好的數(shù)據(jù)表對象,可以添加到數(shù)據(jù)集對象中,代碼如下:代碼如下:dsStu.Tables.Add(dtStuInfo);3數(shù)據(jù)列(數(shù)據(jù)列(DataColumn)對象的創(chuàng)建)對象的創(chuàng)建vDataTable對象中包含多個數(shù)據(jù)列,每列就是一個對象中包含多個數(shù)據(jù)列,每列就是一個DataColumn對象。定義對象。定義DataColumn對象的語法對象的語法格式為:格式為:DataColumn 對象名對象名 = new DataColumn();或或DataColumn 對象名對象名 =
44、new DataColumn(字段名字段名);或或DataColumn 對象名對象名 = new DataColumn(字段名字段名,數(shù)據(jù)類型數(shù)據(jù)類型);例如,創(chuàng)建數(shù)據(jù)列對象例如,創(chuàng)建數(shù)據(jù)列對象stuNoColumn,代碼如下:,代碼如下:DataColumn stuNoColumn= new DataColumn();stuNoColumn.ColumnName= StuNo;stuNoColumn.DataType =System.Type.GetType(System.String);或或DataColumn stuNoColumn= new DataColumn(StuNo, Syst
45、em.Type.GetType(System.String);DataTable對象的常用屬性和方法對象的常用屬性和方法說明:說明:通過通過DataColumn對象的對象的DataType屬性設(shè)置字段數(shù)據(jù)屬性設(shè)置字段數(shù)據(jù)類型時,不可直接設(shè)置數(shù)據(jù)類型,而要按照以下語法格式:類型時,不可直接設(shè)置數(shù)據(jù)類型,而要按照以下語法格式:對象名對象名.DataType = System.Type.GetType(數(shù)據(jù)類型數(shù)據(jù)類型);v創(chuàng)建好的數(shù)據(jù)列對象,可以添加到數(shù)據(jù)表對象中,創(chuàng)建好的數(shù)據(jù)列對象,可以添加到數(shù)據(jù)表對象中,代碼如下:代碼如下:dtStuInfo.Columns.Add(stuNoColumn);
46、4數(shù)據(jù)行(數(shù)據(jù)行(DataRow)的創(chuàng)建)的創(chuàng)建DataTable對象可以包含多個數(shù)據(jù)列,每行就是一個對象可以包含多個數(shù)據(jù)列,每行就是一個DataRow對象。定義對象。定義DataRow對象的語法格式為:對象的語法格式為:DataRow 對象名對象名 = DataTable對象對象.NewRow();注意注意:DataRow對象不能用對象不能用New來創(chuàng)建,而需要用數(shù)來創(chuàng)建,而需要用數(shù)據(jù)表對象的據(jù)表對象的NewRow方法創(chuàng)建。方法創(chuàng)建。例如,為數(shù)據(jù)表對象例如,為數(shù)據(jù)表對象dtStu添加一個新的數(shù)據(jù)行,代添加一個新的數(shù)據(jù)行,代碼如下:碼如下:DataRow dr = dtStuInfo.NewR
47、ow();訪問一行中某個單元格內(nèi)容的方法為:訪問一行中某個單元格內(nèi)容的方法為:DataRow對象名對象名字段名字段名或或DataRow對象名對象名序號序號DataRow對象的常用屬性和方法對象的常用屬性和方法5視圖對象(視圖對象(DataView)的創(chuàng)建)的創(chuàng)建數(shù)據(jù)視圖數(shù)據(jù)視圖DataView是一個對象,它位于數(shù)據(jù)表上面是一個對象,它位于數(shù)據(jù)表上面一層,提供經(jīng)過篩選和排序后的表視圖。通過定制數(shù)一層,提供經(jīng)過篩選和排序后的表視圖。通過定制數(shù)據(jù)視圖可以選擇只顯示表記錄的一個子集,同時在一據(jù)視圖可以選擇只顯示表記錄的一個子集,同時在一個數(shù)據(jù)表上可定義多個個數(shù)據(jù)表上可定義多個DataView。定義定義
48、DataView對象的語法格式為:對象的語法格式為:DataView 對象名對象名= new DataView(數(shù)據(jù)表對象數(shù)據(jù)表對象);例如:例如:DataView dvStuInfo = new DataView(dtStuInfo);DataView對象可以通過以下對象可以通過以下2個屬性定制不同的個屬性定制不同的數(shù)據(jù)視圖。數(shù)據(jù)視圖。RowFilter屬性:設(shè)置選取數(shù)據(jù)行的篩選表達(dá)式。屬性:設(shè)置選取數(shù)據(jù)行的篩選表達(dá)式。Sort屬性:設(shè)置排序字段和方式。屬性:設(shè)置排序字段和方式。例如:例如:DataView dvStuInfo = new DataView (ds.Tables(StuInf
49、o);dvStuInfo.Sort = StuNo desc; /按按StuNo字段字段降序排,如果要升序,將降序排,如果要升序,將desc改為改為ascdvStuInfo.RowFilter = Name = 張三張三;/篩選出篩選出姓名為張三的學(xué)生姓名為張三的學(xué)生【例【例8-13】在內(nèi)存中的數(shù)據(jù)集中,創(chuàng)建一個數(shù)據(jù)表】在內(nèi)存中的數(shù)據(jù)集中,創(chuàng)建一個數(shù)據(jù)表StuInfo,包含學(xué)號(,包含學(xué)號(StuNo 字符串型)、姓名字符串型)、姓名(Name 字符串型)和性別(字符串型)和性別(Sex 字符串型)。對字符串型)。對于所建立的內(nèi)存數(shù)據(jù)表于所建立的內(nèi)存數(shù)據(jù)表StuInfo,編寫程序逐行將,編寫程
50、序逐行將數(shù)據(jù)填入該數(shù)據(jù)表,最后將數(shù)據(jù)綁定到頁面的數(shù)據(jù)填入該數(shù)據(jù)表,最后將數(shù)據(jù)綁定到頁面的GridView控件上??丶稀⒁娛纠齾⒁娛纠诘?8章章SqlServerDemoDataSetDemo.aspx 6類型化的數(shù)據(jù)集類型化的數(shù)據(jù)集創(chuàng)建類型化的數(shù)據(jù)集有多種方法,下面介紹如何使用創(chuàng)建類型化的數(shù)據(jù)集有多種方法,下面介紹如何使用“數(shù)據(jù)數(shù)據(jù)集設(shè)計器集設(shè)計器”創(chuàng)建數(shù)據(jù)集。創(chuàng)建數(shù)據(jù)集。 在在“解決方案資源管理器中解決方案資源管理器中”,鼠標(biāo)右鍵單擊項目名稱,選,鼠標(biāo)右鍵單擊項目名稱,選擇擇“添加新項添加新項”菜單。菜單。 從從“添加新項添加新項”對話框中選擇對話框中選擇“數(shù)據(jù)集數(shù)據(jù)集”。 鍵入該數(shù)據(jù)
51、集的名稱。鍵入該數(shù)據(jù)集的名稱。 單擊單擊“添加添加”按鈕。按鈕。Visual Studio 2010會提示把強(qiáng)類型數(shù)會提示把強(qiáng)類型數(shù)據(jù)集放到據(jù)集放到App_Code目錄中,選擇目錄中,選擇“是是”按鈕。數(shù)據(jù)集將添加按鈕。數(shù)據(jù)集將添加到項目的到項目的App_Code目錄下,并打開目錄下,并打開“數(shù)據(jù)集設(shè)計器數(shù)據(jù)集設(shè)計器”??梢詮目梢詮摹肮ぞ呦涔ぞ呦洹钡牡摹皵?shù)據(jù)集數(shù)據(jù)集”選項卡中拖數(shù)據(jù)表等控件到選項卡中拖數(shù)據(jù)表等控件到設(shè)計器上,設(shè)計相應(yīng)的數(shù)據(jù)集,該數(shù)據(jù)集存儲在設(shè)計器上,設(shè)計相應(yīng)的數(shù)據(jù)集,該數(shù)據(jù)集存儲在.xsd文件中。文件中?!纠纠?-14】演示如何使用類型化的數(shù)據(jù)集完成【例】演示如何使用類型化的
52、數(shù)據(jù)集完成【例8-13】的功能?!康墓δ?。參見示例參見示例第第08章章SqlServerDemoDSStudent.xsd和和DSStudentDemo.aspx v下面將非類型化數(shù)據(jù)集與類型化數(shù)據(jù)集比較,類型下面將非類型化數(shù)據(jù)集與類型化數(shù)據(jù)集比較,類型化數(shù)據(jù)集有以下兩個優(yōu)勢?;瘮?shù)據(jù)集有以下兩個優(yōu)勢。類型化數(shù)據(jù)集的架構(gòu)信息已經(jīng)預(yù)先類型化數(shù)據(jù)集的架構(gòu)信息已經(jīng)預(yù)先“硬編碼硬編碼”到數(shù)據(jù)集內(nèi)。到數(shù)據(jù)集內(nèi)。也就是說,數(shù)據(jù)集按將要獲取的數(shù)據(jù)的表、列以及數(shù)據(jù)類也就是說,數(shù)據(jù)集按將要獲取的數(shù)據(jù)的表、列以及數(shù)據(jù)類型預(yù)先初始化了。這樣,執(zhí)行查詢獲取實際信息時會稍微型預(yù)先初始化了。這樣,執(zhí)行查詢獲取實際信息時會稍
53、微快一些,因為數(shù)據(jù)提供程序分兩步填充空快一些,因為數(shù)據(jù)提供程序分兩步填充空DataSet。它首先。它首先獲取最基礎(chǔ)的架構(gòu)信息,然后再執(zhí)行查詢。獲取最基礎(chǔ)的架構(gòu)信息,然后再執(zhí)行查詢??梢酝ㄟ^類型化數(shù)據(jù)集的屬性名稱而不是基于字段查找的可以通過類型化數(shù)據(jù)集的屬性名稱而不是基于字段查找的方式訪問表和字段的值。這樣,如果使用了錯誤的表名、方式訪問表和字段的值。這樣,如果使用了錯誤的表名、字段名或數(shù)據(jù)類型,就可以在編譯時而不是運(yùn)行時捕獲錯字段名或數(shù)據(jù)類型,就可以在編譯時而不是運(yùn)行時捕獲錯誤。誤。例如,要訪問例如,要訪問StuInfo表的第表的第i行行Name字段的值,非類型化字段的值,非類型化數(shù)據(jù)集的方法
54、是數(shù)據(jù)集的方法是dsStu.TablesStuInfo.RowsiName;類型化的數(shù);類型化的數(shù)據(jù)集的方法是據(jù)集的方法是dsStu.StuInfoi.Name。 8.3.2 使用使用SqlDataAdapter對象執(zhí)行對象執(zhí)行數(shù)據(jù)庫命令數(shù)據(jù)庫命令vDataAdapter是一個特殊的類,其作用是數(shù)據(jù)源與是一個特殊的類,其作用是數(shù)據(jù)源與DataSet對象之間溝通的橋梁。對象之間溝通的橋梁。vDataAdapter提供了雙向的數(shù)據(jù)傳輸機(jī)制,它可以提供了雙向的數(shù)據(jù)傳輸機(jī)制,它可以在數(shù)據(jù)源上執(zhí)行在數(shù)據(jù)源上執(zhí)行Select語句,把查詢結(jié)果集傳送到語句,把查詢結(jié)果集傳送到DataSet對象的數(shù)據(jù)表(對象的
55、數(shù)據(jù)表(DataTable)中,還可以執(zhí))中,還可以執(zhí)行行Insert、Update和和Delete語句,將語句,將DataTable對對象更改過的數(shù)據(jù)提取并更新回數(shù)據(jù)源。象更改過的數(shù)據(jù)提取并更新回數(shù)據(jù)源。 vDataAdapte對象包含四個常用屬性:對象包含四個常用屬性:SelectCommad屬性屬性:是一個:是一個Command對對象,用于從數(shù)據(jù)源中檢索數(shù)據(jù)。象,用于從數(shù)據(jù)源中檢索數(shù)據(jù)。InsertCommand、UpdateCommand和和DeleteCommand屬性屬性:也是:也是Command對象,對象,用于按照對用于按照對DataSet中數(shù)據(jù)的修改來管理對數(shù)中數(shù)據(jù)的修改來管理
56、對數(shù)據(jù)源中數(shù)據(jù)的更新。據(jù)源中數(shù)據(jù)的更新。vDataAdapter對象的常用方法:對象的常用方法:Fill方法方法:調(diào)用:調(diào)用Fill方法會自動執(zhí)行方法會自動執(zhí)行SelectCommand屬性中提供的命令,獲取結(jié)果屬性中提供的命令,獲取結(jié)果集并填充數(shù)據(jù)集的集并填充數(shù)據(jù)集的DataTable對象。其本質(zhì)是通對象。其本質(zhì)是通過執(zhí)行過執(zhí)行SelectCommand對象的對象的Select語句查詢語句查詢數(shù)據(jù)庫,返回數(shù)據(jù)庫,返回DataReader對象,通過對象,通過DataReader對象隱式地創(chuàng)建對象隱式地創(chuàng)建DataSet中的表,并中的表,并填充填充DataSet中表行的數(shù)據(jù)。中表行的數(shù)據(jù)。vUp
57、date方法方法:調(diào)用:調(diào)用InsertCommand、UpdateCommand和和DeleteCommand屬性指定的屬性指定的SQL命令,將命令,將DataSet對象更新到相應(yīng)的數(shù)據(jù)源。對象更新到相應(yīng)的數(shù)據(jù)源。在在Update方法中,逐行檢查數(shù)據(jù)表每行的方法中,逐行檢查數(shù)據(jù)表每行的RowState屬性值,根據(jù)不同的屬性值,根據(jù)不同的RowState屬性,調(diào)屬性,調(diào)用不同的用不同的Command命令更新數(shù)據(jù)庫。命令更新數(shù)據(jù)庫。DataAdapter對象更新數(shù)據(jù)庫示例圖如圖所示。對象更新數(shù)據(jù)庫示例圖如圖所示。定義定義SqlDataAdapter對象的方法有對象的方法有4種:種:SqlDataAdapter對象名對象名= new SqlDataAdapter()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 燈具設(shè)計師保密知識考核試卷含答案
- 鉆井柴油機(jī)工安全專項知識考核試卷含答案
- 爬行類繁育工崗前沖突解決考核試卷含答案
- 平臺穩(wěn)性操作員安全管理知識考核試卷含答案
- 脫酚工崗前理論技術(shù)考核試卷含答案
- 毛皮加工工安全風(fēng)險考核試卷含答案
- 紡織纖維梳理工崗前紀(jì)律考核試卷含答案
- 水生動物飼養(yǎng)工測試驗證評優(yōu)考核試卷含答案
- 侍酒師變革管理能力考核試卷含答案
- 地層測試工崗前實操熟練考核試卷含答案
- 1.手術(shù)室患者人文關(guān)懷管理規(guī)范中國生命關(guān)懷協(xié)會團(tuán)體標(biāo)準(zhǔn)TCALC003-2023
- 2025年國家開放大學(xué)(電大)《經(jīng)濟(jì)法》期末考試備考試題及答案解析
- 恒溫庫安裝施工方案
- 煤礦機(jī)電運(yùn)輸安全培訓(xùn)課件
- 安全員考試題庫電子版及答案解析
- 養(yǎng)老護(hù)理員人際關(guān)系與溝通
- 希臘國家介紹
- 助理值班員(高級)技能鑒定理論題庫(含答案)
- 有限責(zé)任公司規(guī)范章程模板參考
- 安徽省2025年普通高中學(xué)業(yè)水平合格性考試英語考題及答案
- STAT3基因SNPs多態(tài)性與原發(fā)性高血壓關(guān)聯(lián)的深度剖析
評論
0/150
提交評論