第14章數(shù)據(jù)庫與應(yīng)用程序接口_第1頁
第14章數(shù)據(jù)庫與應(yīng)用程序接口_第2頁
第14章數(shù)據(jù)庫與應(yīng)用程序接口_第3頁
第14章數(shù)據(jù)庫與應(yīng)用程序接口_第4頁
第14章數(shù)據(jù)庫與應(yīng)用程序接口_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、2通過前面的學(xué)習(xí),我們已掌握了通過前面的學(xué)習(xí),我們已掌握了SQL Server 2008的基本技術(shù),具備了在后臺對數(shù)據(jù)庫進(jìn)行管的基本技術(shù),具備了在后臺對數(shù)據(jù)庫進(jìn)行管理的能力,那么,如何在前臺以理的能力,那么,如何在前臺以windows應(yīng)用程應(yīng)用程序或網(wǎng)頁的形式對后臺的數(shù)據(jù)進(jìn)行插入、修改、序或網(wǎng)頁的形式對后臺的數(shù)據(jù)進(jìn)行插入、修改、刪除呢?刪除呢?3本章學(xué)習(xí)任務(wù)本章學(xué)習(xí)任務(wù)q 開發(fā)工具連接開發(fā)工具連接SQL Server 2008,實(shí)現(xiàn),實(shí)現(xiàn)數(shù)據(jù)的查詢數(shù)據(jù)的查詢數(shù)據(jù)的插入數(shù)據(jù)的插入 數(shù)據(jù)的修改數(shù)據(jù)的修改 數(shù)據(jù)的刪除數(shù)據(jù)的刪除lADO.NET是微軟新一代是微軟新一代.NET數(shù)據(jù)庫訪問架構(gòu),一種具有數(shù)

2、據(jù)庫訪問架構(gòu),一種具有可擴(kuò)展性的數(shù)據(jù)存取模型??蓴U(kuò)展性的數(shù)據(jù)存取模型。l在在ADO.NET中,大量復(fù)雜的數(shù)據(jù)操作代碼被封裝起來,中,大量復(fù)雜的數(shù)據(jù)操作代碼被封裝起來, 提供了一個統(tǒng)一的編程模式和一組公用的類來進(jìn)行任何類提供了一個統(tǒng)一的編程模式和一組公用的類來進(jìn)行任何類型的數(shù)據(jù)訪問,而與具體開發(fā)語言無關(guān)。型的數(shù)據(jù)訪問,而與具體開發(fā)語言無關(guān)。l介于數(shù)據(jù)源和數(shù)據(jù)使用者之間的橋梁。開發(fā)人員只需編寫介于數(shù)據(jù)源和數(shù)據(jù)使用者之間的橋梁。開發(fā)人員只需編寫少量代碼即可輕易地實(shí)現(xiàn)數(shù)據(jù)庫操作。少量代碼即可輕易地實(shí)現(xiàn)數(shù)據(jù)庫操作。4使用者使用者ADO.NET數(shù)據(jù)庫數(shù)據(jù)庫5.NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序Connect

3、ionTransactionCommandParametersDataReaderDataAdapterSelectCommandInsertCommandUpdateCommandDeleteCommandDataSetDataTableCollectionDataTableDataRowCollectionDataColumnCollectionConstraintCollectionDataRelationCollectionl.NET Data Provider訪問數(shù)據(jù)源的一組類庫,為訪問數(shù)據(jù)源的一組類庫,為統(tǒng)一對于各類型數(shù)據(jù)源的訪問方式而設(shè)計(jì)。可用統(tǒng)一對于各類型數(shù)據(jù)源的訪問方式而設(shè)計(jì)

4、??捎脕磉B接數(shù)據(jù)庫,執(zhí)行命令和獲取結(jié)果。來連接數(shù)據(jù)庫,執(zhí)行命令和獲取結(jié)果。l可直接處理結(jié)果,或放在可直接處理結(jié)果,或放在DataSet中。中。l5種種.NET 數(shù)據(jù)提供程序數(shù)據(jù)提供程序l用于用于SQL Server的數(shù)據(jù)提供程序的數(shù)據(jù)提供程序l用于用于OLEDB的數(shù)據(jù)提供程序的數(shù)據(jù)提供程序l用于用于ODBC的數(shù)據(jù)提供程序的數(shù)據(jù)提供程序l用于用于Oracle的數(shù)據(jù)提供程序的數(shù)據(jù)提供程序lEntityClient數(shù)據(jù)提供程序數(shù)據(jù)提供程序6SqlClient VS OleDbl用于用于 SQL Server的數(shù)據(jù)提供程序的數(shù)據(jù)提供程序 :使用自己的協(xié)議與:使用自己的協(xié)議與 SQL Server進(jìn)行通

5、信。輕量且性能良好,直接訪問進(jìn)行通信。輕量且性能良好,直接訪問SQL Server,無需添加,無需添加 OLE DB 或或 ODBC層。層。 l用于用于 OLE DB的數(shù)據(jù)提供程序的數(shù)據(jù)提供程序:通過:通過 OLE DB服務(wù)組件服務(wù)組件(提供連接池和事務(wù)服務(wù))和用于數(shù)據(jù)源的(提供連接池和事務(wù)服務(wù))和用于數(shù)據(jù)源的 OLE DB 訪訪問接口與問接口與 OLE DB 數(shù)據(jù)源進(jìn)行通信。數(shù)據(jù)源進(jìn)行通信。 1. .NET Data Provider8對象名稱功能說明Connection提供和數(shù)據(jù)源的連接功能。Command訪問用于返回?cái)?shù)據(jù)、修改數(shù)據(jù)、運(yùn)行存儲過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令。 Dat

6、aAdapterDataSet對象和數(shù)據(jù)源間的橋梁。使用4個Command對象來運(yùn)行查詢、新建、修改、刪除的SQL命令,把數(shù)據(jù)加載到DataSet,或者把DataSet內(nèi)的數(shù)據(jù)送回?cái)?shù)據(jù)源。DataReader通過Command對象運(yùn)行SQL查詢命令取得數(shù)據(jù)流,以便進(jìn)行高速、只讀的數(shù)據(jù)瀏覽。9ADO .NET離線數(shù)據(jù)訪問模型的核心,在內(nèi)存中暫離線數(shù)據(jù)訪問模型的核心,在內(nèi)存中暫存并處理各種從數(shù)據(jù)源中所取回的數(shù)據(jù)。存并處理各種從數(shù)據(jù)源中所取回的數(shù)據(jù)。一個一個存放在內(nèi)存中的數(shù)據(jù)暫存區(qū)存放在內(nèi)存中的數(shù)據(jù)暫存區(qū),這些數(shù)據(jù)須通,這些數(shù)據(jù)須通過過DataAdapter對象與數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交換。對象與數(shù)據(jù)庫進(jìn)行

7、數(shù)據(jù)交換??砂ǘ鄠€可包括多個DataTable對象,而對象,而DataTable包含列和包含列和行,就象一個普通的數(shù)據(jù)庫中的表。甚至能夠定義行,就象一個普通的數(shù)據(jù)庫中的表。甚至能夠定義表之間的關(guān)系來創(chuàng)建主從關(guān)系(表之間的關(guān)系來創(chuàng)建主從關(guān)系(parent-child relationships)。)。趣味理解趣味理解ADO.NETl用用Connetction、Command和和DataReader對象,但只能讀取數(shù)據(jù)對象,但只能讀取數(shù)據(jù)庫,不能修改數(shù)據(jù)。庫,不能修改數(shù)據(jù)。 l用用Connection、Command、DataAdapter和和DataSet對象,更靈活,可對數(shù)對象,更靈活,可對

8、數(shù)據(jù)庫進(jìn)行各種操作。據(jù)庫進(jìn)行各種操作。 11使用使用 DataSet 可執(zhí)行以下操作:可執(zhí)行以下操作: l在應(yīng)用程序中將數(shù)據(jù)緩存在本地,以便對數(shù)據(jù)進(jìn)在應(yīng)用程序中將數(shù)據(jù)緩存在本地,以便對數(shù)據(jù)進(jìn)行處理。如果只需讀取查詢結(jié)果,則行處理。如果只需讀取查詢結(jié)果,則 DataReader 是更好的選擇。是更好的選擇。 l在層間或從在層間或從 XML Web services 對數(shù)據(jù)進(jìn)行遠(yuǎn)程對數(shù)據(jù)進(jìn)行遠(yuǎn)程處理。處理。l與數(shù)據(jù)進(jìn)行動態(tài)交互,例如綁定到與數(shù)據(jù)進(jìn)行動態(tài)交互,例如綁定到 Windows 窗體窗體控件或組合并關(guān)聯(lián)來自多個源的數(shù)據(jù)??丶蚪M合并關(guān)聯(lián)來自多個源的數(shù)據(jù)。l對數(shù)據(jù)執(zhí)行大量的處理,而不需要與數(shù)據(jù)

9、源保持對數(shù)據(jù)執(zhí)行大量的處理,而不需要與數(shù)據(jù)源保持打開的連接,從而將該連接釋放給其他客戶端使打開的連接,從而將該連接釋放給其他客戶端使用。用。(1)建立)建立Connection對象,創(chuàng)建一個數(shù)據(jù)庫連接。對象,創(chuàng)建一個數(shù)據(jù)庫連接。(2)使用)使用Command對象對數(shù)據(jù)庫發(fā)送查詢、新增、修改和刪對象對數(shù)據(jù)庫發(fā)送查詢、新增、修改和刪除等命令。除等命令。(3)創(chuàng)建)創(chuàng)建DataAdapter對象,從數(shù)據(jù)庫中取得數(shù)據(jù)。對象,從數(shù)據(jù)庫中取得數(shù)據(jù)。(4)創(chuàng)建)創(chuàng)建DataSet對象,將對象,將DataAdapter對象填充到對象填充到DataSet對對象(數(shù)據(jù)集)中。象(數(shù)據(jù)集)中。(5)如果需要,可以重

10、復(fù)操作,一個)如果需要,可以重復(fù)操作,一個DataSet對象可以容納多對象可以容納多個數(shù)據(jù)集合。個數(shù)據(jù)集合。(6)關(guān)閉數(shù)據(jù)庫。)關(guān)閉數(shù)據(jù)庫。(7)在)在DataSet上進(jìn)行所需操作。數(shù)據(jù)集的數(shù)據(jù)輸出到窗體中上進(jìn)行所需操作。數(shù)據(jù)集的數(shù)據(jù)輸出到窗體中或者網(wǎng)頁上面,需要設(shè)定數(shù)據(jù)顯示控件的數(shù)據(jù)源為數(shù)據(jù)集?;蛘呔W(wǎng)頁上面,需要設(shè)定數(shù)據(jù)顯示控件的數(shù)據(jù)源為數(shù)據(jù)集。131415SqlConnection類屬性說明ConnectionString獲取或設(shè)置用于打開數(shù)據(jù)庫的字符串。ConnectionTimeout獲取在嘗試建立連接時終止嘗試并生成錯誤之前所等待的時間。Database獲取當(dāng)前數(shù)據(jù)庫或連接打開后要使

11、用的數(shù)據(jù)庫的名稱。DataSource獲取數(shù)據(jù)源的服務(wù)器名或文件名。Provider獲取在連接字符串的“Provider=”子句中指定的SQL提供程序的名稱。State獲取連接的當(dāng)前狀態(tài)。SqlConnection類方法說明Open使用 ConnectionString 所指定的屬性設(shè)置打開數(shù)據(jù)庫連接。Close關(guān)閉與數(shù)據(jù)庫的連接。這是關(guān)閉任何打開連接的首選方法。CreateCommand創(chuàng)建并返回一個與 SqlConnection 關(guān)聯(lián)的SqlCommand 對象。ChangeDatabase為打開的SqlConnection 更改當(dāng)前數(shù)據(jù)庫。2. 建立連接字符串建立連接字符串Connect

12、ionString方法方法:創(chuàng)建:創(chuàng)建SqlConnection對象,設(shè)置對象,設(shè)置ConnectionString屬性。屬性。1)混合模式連接)混合模式連接須提供登錄名和登陸口令。須提供登錄名和登陸口令。string mycon = server=(local);database=students;uid=cumt;pwd=cumt;2)windows模式連接模式連接string myconn=server=(local);database=students; Integrated Security=true;16連接連接ACCESSstring mycon = “provider=Micr

13、osfot.Jet.OLEDB.4.0;Data Source=“+Server.MapPath(“App_Code/Text.mdb;lData Source(或(或Server或或Address):待連接的):待連接的SQL Server實(shí)例的名稱或網(wǎng)絡(luò)地址。實(shí)例的名稱或網(wǎng)絡(luò)地址。lInitial Catalog(或(或Database):數(shù)據(jù)庫的名稱。):數(shù)據(jù)庫的名稱。lIntegrated Security(或(或Trusted_Connection):為):為False(默認(rèn))時,將在連接中指定用戶(默認(rèn))時,將在連接中指定用戶ID和密碼。為和密碼。為True時,時,使用當(dāng)前使用當(dāng)前

14、Windows帳戶進(jìn)行身份驗(yàn)證??勺R別帳戶進(jìn)行身份驗(yàn)證??勺R別True、False、yes、no以及與以及與True 等效的等效的SSPI(強(qiáng)烈推薦)。(強(qiáng)烈推薦)。lUser ID:SQL Server登錄帳戶。登錄帳戶。lPassword(或(或Pwd):):SQL Server帳戶登錄的密碼。帳戶登錄的密碼。17設(shè)計(jì)步驟:設(shè)計(jì)步驟:(1)添加一個名稱為)添加一個名稱為WebForm14-1的空網(wǎng)頁。的空網(wǎng)頁。(2)設(shè)計(jì)界面如下圖所示,其中包含一個)設(shè)計(jì)界面如下圖所示,其中包含一個Button控件控件Button1和一個標(biāo)簽和一個標(biāo)簽Label1。18protected void Butt

15、on1_Click(object sender, EventArgs e) string mystr; SqlConnection myconn = new SqlConnection(); mystr = Data Source=localhost;Initial Catalog=student; + Integrated Security=False;User Id=sa; Password=123456; myconn.ConnectionString = mystr; myconn.Open(); if (myconn.State = ConnectionState.Open) Lab

16、el1.Text = 成功連接到成功連接到SQL Server數(shù)據(jù)庫數(shù)據(jù)庫(lzw); else Label1.Text = 不能連接到不能連接到SQL Server數(shù)據(jù)庫數(shù)據(jù)庫(lzw); myconn.Close(); 19多在多在Web.config中保存連接字符串,再通過對文件加密,中保存連接字符串,再通過對文件加密,從而達(dá)到保護(hù)連接字符串的目的。從而達(dá)到保護(hù)連接字符串的目的。例例14.2,在,在節(jié)中插入以下代碼:節(jié)中插入以下代碼:20string mystr =ConfigurationManager.ConnectionStringsmyconn.ToString();SqlCon

17、nection myconn = new SqlConnection();myconn.ConnectionString = mystr;myconn.Open();也可在也可在Web.config文件的文件的節(jié)中插入代碼:節(jié)中插入代碼:21string mystr = ConfigurationManager.AppSettings;SqlConnection conn = new SqlConnection();conn.ConnectionString = mystr;conn.Open();l建立連接后,即可執(zhí)行操作。一般對數(shù)據(jù)庫的操作被概括建立連接后,即可執(zhí)行操作。一般對數(shù)據(jù)庫的操作

18、被概括為為CRUDCreate、Read、Update和和Delete。l1. SqlCommand 類的屬性和方法類的屬性和方法22SqlCommand 類屬性說明CommandText獲取/設(shè)置要對數(shù)據(jù)源執(zhí)行的 T-SQL 語句或存儲過程。CommandTimeout獲取/設(shè)置在終止執(zhí)行命令的嘗試并生成錯誤前的等待時間。CommandType獲取或設(shè)置一個值,指示如何解釋CommandText屬性。Connection數(shù)據(jù)命令對象所使用的連接對象Parameters參數(shù)集合(SqlParameterCollection)2. SqlCommand 的構(gòu)造函數(shù)的構(gòu)造函數(shù)23SqlComman

19、d 類方法說明CreateParameter 創(chuàng)建SqlParameter對象的新實(shí)例。 ExecuteNonQuery 針對Connection 執(zhí)行SQL語句并返回受影響的行數(shù)。 ExecuteReader 將CommandText發(fā)送到Connection并生成一個SqlDataReader。 ExecuteScalar 執(zhí)行查詢,并返回查詢所返回的結(jié)果集中第一行的第一列。忽略其他列或行。 SqlCommand() 初始化 SqlCommand 類的新實(shí)例。SqlCommand(String) 用查詢文本初始化 SqlCommand 類的新實(shí)例。SqlCommand(String, Sq

20、lConnection) 初始化具有查詢文本和 SqlConnection 的 SqlCommand 類的新實(shí)例。SqlCommand(String, SqlConnection, SqlTransaction) 使用查詢文本、一個 SqlConnection 以及 SqlTransaction 來初始化 SqlCommand 類的新實(shí)例。 string mystr = ConfigurationManager.ConnectionStringsmyconn.ToString();SqlConnection conn = new SqlConnection(mystr);SqlCommand

21、cmd = new SqlCommand();cmd.CommandType = CommandType.Text;cmd.CommandText = select name,birthday from stud_info;cmd.Connection = conn;conn.Open();24 protected void Page_Load(object sender, EventArgs e) string connStr= ConfigurationManager.ConnectionStringsmyconn.ToString(); SqlConnection conn = new

22、SqlConnection(connStr); string commStr=select * from stud_info; SqlCommand cmd = new SqlCommand(commStr, conn); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); this.GridView1.DataSource = dr; this.GridView1.DataBind(); dr.Close(); conn.Close(); 2526在在SqlCommand 的方法中,的方法中,ExecuteScalar方法執(zhí)行返回方法執(zhí)行

23、返回單個值的單個值的SQL命令。命令。例例14.4,如果想獲取,如果想獲取Student數(shù)據(jù)表中學(xué)生的總?cè)藬?shù),則數(shù)據(jù)表中學(xué)生的總?cè)藬?shù),則可以使用這個方法執(zhí)行可以使用這個方法執(zhí)行SQL查詢:查詢:SELECT Count(*) FROM student設(shè)計(jì)步驟:設(shè)計(jì)步驟:(1)添加一個名稱為)添加一個名稱為WebForm14-5的空網(wǎng)頁。的空網(wǎng)頁。(2)包含一個)包含一個HTML標(biāo)簽、一個文本框標(biāo)簽、一個文本框TextBox1和一個和一個Button控件控件Button1,將該網(wǎng)頁的,將該網(wǎng)頁的StyleSheetTheme屬性設(shè)屬性設(shè)置為置為Blue。 27protected void But

24、ton1_Click(object sender, EventArgs e)SqlConnection conn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); conn.ConnectionString = ConfigurationManager.ConnectionStringsmycons.ToString(); conn.Open(); string mysql = SELECT AVG(grade) FROM stud_grade; cmd.CommandText = mysql; cmd.Connection =

25、 conn; TextBox1.Text = cmd.ExecuteScalar().ToString(); conn.Close();28單擊工具欄中的單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,再單擊按鈕運(yùn)行本網(wǎng)頁,再單擊“求平均分求平均分”命令按鈕,其運(yùn)行結(jié)果如下圖所示,表示所有學(xué)生平均分命令按鈕,其運(yùn)行結(jié)果如下圖所示,表示所有學(xué)生平均分為為78。29在在SqlCommand 的方法中,的方法中,ExecuteNonQuery方法執(zhí)行方法執(zhí)行不返回結(jié)果的不返回結(jié)果的SQL命令。命令。該方法主要用來更新數(shù)據(jù),常用它來執(zhí)行該方法主要用來更新數(shù)據(jù),常用它來執(zhí)行UPDATE、INSERT和和DELETE語句。

26、語句。該方法不返回行,對于該方法不返回行,對于UPDATE、INSERT和和DELETE語句,返回值為該命令所影響的行數(shù)。語句,返回值為該命令所影響的行數(shù)。30public partial class WebForm12_6: System.Web.UI.PageSqlCommand mycmd = new SqlCommand(); SqlConnection myconn = new SqlConnection();protected void Page_Load(object sender, EventArgs e)string mystr=ConfigurationManager.Co

27、nnectionStringsmycons.ToString();myconn.ConnectionString = mystr;myconn.Open();protected void Page_Unload()myconn.Close();/關(guān)閉本網(wǎng)頁時關(guān)閉連接關(guān)閉本網(wǎng)頁時關(guān)閉連接31protected void Button1_Click(object sender, EventArgs e)string mysql;mysql = UPDATE stud_grade SET grade= grade +5;mycmd.CommandText = mysql;mycmd.Connecti

28、on = myconn;mycmd.ExecuteNonQuery();protected void Button2_Click(object sender, EventArgs e)string mysql;mysql = UPDATE stud_grade SET grade= grade -5;mycmd.CommandText = mysql;mycmd.Connection = myconn;mycmd.ExecuteNonQuery();32單擊工具欄中的單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,單擊按鈕運(yùn)行本網(wǎng)頁,單擊“分?jǐn)?shù)分?jǐn)?shù)+5”命命令按鈕,此時令按鈕,此時score表中所有分?jǐn)?shù)都增加表

29、中所有分?jǐn)?shù)都增加5分,為了保存分,為了保存score表不變,再單擊表不變,再單擊“分?jǐn)?shù)分?jǐn)?shù)-5”命令按鈕,此時命令按鈕,此時score表中表中所有分?jǐn)?shù)都恢復(fù)成原來的數(shù)據(jù),其運(yùn)行界面如下圖所示。所有分?jǐn)?shù)都恢復(fù)成原來的數(shù)據(jù),其運(yùn)行界面如下圖所示。3334主要流程主要流程:(1)創(chuàng)建)創(chuàng)建Connection對象,并設(shè)置相應(yīng)的屬性值。對象,并設(shè)置相應(yīng)的屬性值。(2)打開)打開Connection對象。對象。(3)創(chuàng)建)創(chuàng)建Command對象并設(shè)置相應(yīng)的屬性值,其中對象并設(shè)置相應(yīng)的屬性值,其中SQL語句含有占位符。語句含有占位符。(4)創(chuàng)建參數(shù)對象,將建立好的參數(shù)對象添加到)創(chuàng)建參數(shù)對象,將建立好的參

30、數(shù)對象添加到Command對象的對象的Parameters集合中。集合中。(5)為參數(shù)對象賦值。)為參數(shù)對象賦值。(6)執(zhí)行數(shù)據(jù)命令。)執(zhí)行數(shù)據(jù)命令。(7)關(guān)閉相關(guān)對象。)關(guān)閉相關(guān)對象。35 例例14.7,更新語句:,更新語句:UPDATE lesson_info SET course_name= Name WHERE course_id= CID該命令是將指定該命令是將指定course_id的課程記錄的的課程記錄的course_name替換成替換成指定的值。其中指定的值。其中CID和和Name均為參數(shù),在執(zhí)行該語句之前均為參數(shù),在執(zhí)行該語句之前需要為參數(shù)賦值。需要為參數(shù)賦值。可用以下命令向可

31、用以下命令向Parameters參數(shù)集合中添加參數(shù)值:參數(shù)集合中添加參數(shù)值:mycmd.Parameters.Add(Name,SqlType.VarChar,10).Value = Name1;mycmd.Parameters.Add(CID, SqlType.VarChar,5).Value = ID1;36設(shè)計(jì)界面如下圖所示,其中包含兩個設(shè)計(jì)界面如下圖所示,其中包含兩個HTML標(biāo)簽、兩個文本框標(biāo)簽、兩個文本框(TextBox1和和TextBox2)和一個)和一個Button控件控件Button1,將該網(wǎng)頁,將該網(wǎng)頁的的StyleSheetTheme屬性設(shè)置為屬性設(shè)置為Blue。 網(wǎng)頁設(shè)計(jì)

32、界面網(wǎng)頁設(shè)計(jì)界面37protected void Button1_Click(object sender, EventArgs e)SqlConnection myconn = new SqlConnection();SqlCommand mycmd = new SqlCommand();myconn.ConnectionString = ConfigurationManager.ConnectionStringsmycons.ToString();myconn.Open(); string mysql = SELECT AVG(grade) FROM stud_grade WHERE stu

33、d_id=no;mycmd.CommandText = mysql;mycmd.Connection = myconn;mycmd.Parameters.Add(no, SqlDbType.VarChar, 10).Value = TextBox1.Text;TextBox2.Text = mycmd.ExecuteScalar().ToString();myconn.Close();38網(wǎng)頁運(yùn)行界面網(wǎng)頁運(yùn)行界面上述代碼先建立連接,然后通過上述代碼先建立連接,然后通過ExecuteScalar方法執(zhí)行方法執(zhí)行SQL命令,通過命令,通過“no”替換返回指定學(xué)號的平均分。運(yùn)行替換返回指定學(xué)號的平均

34、分。運(yùn)行本網(wǎng)頁,輸入學(xué)號本網(wǎng)頁,輸入學(xué)號8,單擊,單擊“求平均分求平均分”命令按鈕,運(yùn)行界命令按鈕,運(yùn)行界面如下圖所示。面如下圖所示。39當(dāng)執(zhí)行返回結(jié)果集的命令時,需要一個方法從結(jié)果集當(dāng)執(zhí)行返回結(jié)果集的命令時,需要一個方法從結(jié)果集中提取數(shù)據(jù)。處理結(jié)果集的方法有兩個:中提取數(shù)據(jù)。處理結(jié)果集的方法有兩個:(1)使用)使用SqlDataReader對象(數(shù)據(jù)閱讀器);對象(數(shù)據(jù)閱讀器);(2)使用)使用SqlDataAdapter對象(數(shù)據(jù)適配器)和對象(數(shù)據(jù)適配器)和DataSet對象。對象。40屬性說明FieldCount獲取當(dāng)前行中的列數(shù)IsClosed獲取一個布爾值,指出SqlDataRea

35、der對象是否關(guān)閉RecordsAffected獲取執(zhí)行SQL語句時修改的行數(shù)方法說明Read將SqlDataReader對象前進(jìn)到下一行并讀取,返回布爾值指示是否有多行Close關(guān)閉SqlDataReader對象IsDBNull返回布爾值,表示列是否包含NULL值NextResult將SqlDataReader對象移到下一個結(jié)果集,返回布爾值指示該結(jié)果集是否有多行GetBoolean返回指定列的值,類型為布爾值GetString返回指定列的值,類型為字符串GetByte返回指定列的值,類型為字節(jié)GetInt32返回指定列的值,類型為整型值GetDouble返回指定列的值,類型為雙精度值Get

36、DataTime返回指定列的值,類型為日期時間值GetOrdinal返回指定列的序號或數(shù)字位置(首列序號為0)GetBoolean返回指定列的值,類型為對象41 SqlDataReader對象,用于從數(shù)據(jù)源中讀取只讀的數(shù)據(jù)集,對象,用于從數(shù)據(jù)源中讀取只讀的數(shù)據(jù)集,常用語檢索大量數(shù)據(jù)。常用語檢索大量數(shù)據(jù)。 SqlDataReader類沒有公有的構(gòu)造函數(shù)。常用類沒有公有的構(gòu)造函數(shù)。常用Command類類的的ExecuteReader方法,返回一個方法,返回一個DataReader對象。對象。 例,以下代碼創(chuàng)建一個例,以下代碼創(chuàng)建一個SqlDataReader對象對象myreader:SqlComm

37、and cmd = new SqlCommand (CommandText,ConneObject);SqlDataReader myreader = cmd.ExecuteReader();注注:SqlDataReader對象不能使用對象不能使用new來創(chuàng)建。來創(chuàng)建。42當(dāng)當(dāng)ExecuteReader方法返回方法返回DataReader對象時,當(dāng)前光標(biāo)位對象時,當(dāng)前光標(biāo)位置在置在第一條記錄前面第一條記錄前面。須調(diào)用。須調(diào)用Read方法把光標(biāo)移動到第一條記方法把光標(biāo)移動到第一條記錄,然后,第一條記錄將變成當(dāng)前記錄。錄,然后,第一條記錄將變成當(dāng)前記錄。如果記錄不止一條,如果記錄不止一條,Read

38、方法就返回一個方法就返回一個Boolean值值true。想要移動到下一條記錄,需再次調(diào)用想要移動到下一條記錄,需再次調(diào)用Read方法。重復(fù)上述過程,方法。重復(fù)上述過程,直到最后一條記錄,此時直到最后一條記錄,此時Read方法將返回方法將返回false。常用。常用While循環(huán)循環(huán)來遍歷記錄:來遍歷記錄:while (myreader.Read()/讀取數(shù)據(jù)讀取數(shù)據(jù)只要只要Read方法返回的值為方法返回的值為true,就可以訪問當(dāng)前記錄中包含,就可以訪問當(dāng)前記錄中包含的字段。的字段。43(1)Item屬性屬性返回一個代碼字段屬性的對象。返回一個代碼字段屬性的對象。Item屬性是屬性是DataRe

39、ader對象的索引。注:對象的索引。注:Item屬性總是基于屬性總是基于0開始編號:開始編號:myreaderFieldName myreaderFieldIndex(2)Get方法方法每個每個DataReader對象都定義了一組對象都定義了一組Get方法,其將返回方法,其將返回適當(dāng)類型的值。如,適當(dāng)類型的值。如,GetInt32方法把返回的字段值作為方法把返回的字段值作為32位位整數(shù),每個整數(shù),每個Get方法都將接受字段的索引。方法都將接受字段的索引。 myreader.GetInt320myreader.GetString144設(shè)計(jì)步驟:設(shè)計(jì)步驟:(1)在)在Myaspnet網(wǎng)站添加一個名

40、稱為網(wǎng)站添加一個名稱為WebForm14-8的空的空網(wǎng)頁。網(wǎng)頁。(2)其設(shè)計(jì)界面如下圖所示,其中包含一個列表框)其設(shè)計(jì)界面如下圖所示,其中包含一個列表框ListBox1(Rows屬性設(shè)為屬性設(shè)為8)和一個)和一個Button控件控件Button1,將,將該網(wǎng)頁的該網(wǎng)頁的StyleSheetTheme屬性設(shè)置為屬性設(shè)置為Blue。 網(wǎng)頁設(shè)計(jì)界面網(wǎng)頁設(shè)計(jì)界面45protected void Button1_Click(object sender, EventArgs e)string mystr,mysql;SqlConnection myconn = new SqlConnection();Sq

41、lCommand mycmd = new SqlCommand();mystr =ConfigurationManager.ConnectionStringsmycons.ToString();myconn.ConnectionString = mystr;myconn.Open();mysql = SELECT * FROM stud_info;mycmd.CommandText = mysql;mycmd.Connection = myconn;SqlDataReader myreader = mycmd.ExecuteReader();ListBox1.Items.Add(學(xué)號學(xué)號 姓名

42、姓名 性別性別 民族民族 班號班號);ListBox1.Items.Add(=); while (myreader.Read()/循環(huán)讀取信息循環(huán)讀取信息ListBox1.Items.Add(String.Format(0 1 2 3 4,myreader0.ToString(), myreader1.ToString(), myreader2.ToString(), myreader3.ToString(),myreader4.ToString();myconn.Close();myreader.Close();46網(wǎng)頁運(yùn)行界面網(wǎng)頁運(yùn)行界面單擊工具欄中的單擊工具欄中的按鈕運(yùn)行本網(wǎng)頁,單擊按鈕

43、運(yùn)行本網(wǎng)頁,單擊“輸出所有學(xué)輸出所有學(xué)生生”命令按鈕,運(yùn)行界面如下圖所示。命令按鈕,運(yùn)行界面如下圖所示。47表示一組表示一組 SQL 命令和一個數(shù)據(jù)庫連接,它們用于填充命令和一個數(shù)據(jù)庫連接,它們用于填充 DataSet 和更新數(shù)據(jù)源。和更新數(shù)據(jù)源。SqlDataAdapter對象(數(shù)據(jù)適配器)可執(zhí)行對象(數(shù)據(jù)適配器)可執(zhí)行SQL命令以及命令以及調(diào)用存儲過程、傳遞參數(shù),最重要的是取得數(shù)據(jù)結(jié)果集,在調(diào)用存儲過程、傳遞參數(shù),最重要的是取得數(shù)據(jù)結(jié)果集,在數(shù)據(jù)庫和數(shù)據(jù)庫和DataSet對象之間來回傳輸數(shù)據(jù)。對象之間來回傳輸數(shù)據(jù)。數(shù)據(jù)庫數(shù)據(jù)庫DataSet對象對象SqlDataAdapter對象對象48屬

44、性說明SelectCommand獲取或設(shè)置SQL語句用于選擇數(shù)據(jù)源中的記錄。該值為SqlCommand 對象InsertCommand獲取或設(shè)置SQL語句用于將新記錄插入到數(shù)據(jù)源中。該值為SqlCommand 對象UpdateCommand獲取或設(shè)置SQL語句用于更新數(shù)據(jù)源中的記錄。該值為SqlCommand 對象DeleteCommand獲取或設(shè)置SQL語句用于從數(shù)據(jù)集中刪除記錄。該值為SqlCommand 對象AcceptChangesDuringFill獲取或設(shè)置一個值,該值指示在任何Fill操作過程中時,是否接受對行所做的修改AcceptChangesDuringUpdate獲取或設(shè)置

45、在Update期間是否調(diào)用AcceptChangesFillLoadOption獲取或設(shè)置LoadOption,后者確定適配器如何從SqlDataReader中填充DataTableMissingMappingAction確定傳入數(shù)據(jù)沒有匹配的表或列時需要執(zhí)行的操作MissingSchemaAction確定現(xiàn)有DataSet架構(gòu)與傳入數(shù)據(jù)不匹配時需要執(zhí)行的操作TableMappings獲取一個集合,它提供源表和DataTable之間的主映射49方法說明Fill用來執(zhí)行SqlDataAdapter對象的SelectCommand屬性中相對應(yīng)的SQL語句,以檢索數(shù)據(jù)庫中的數(shù)據(jù),然后更新數(shù)據(jù)集中的D

46、ataTable對象,如果DataTable對象不存在,則創(chuàng)建它FillSchema將DataTable添加到DataSet中,并配置架構(gòu)以匹配數(shù)據(jù)源中的架構(gòu)GetFillParameters獲取當(dāng)執(zhí)行SQL SELECT語句時由用戶設(shè)置的參數(shù)Update用來自動執(zhí)行UpdateCommand、InsertCommand或DeleteCommand屬性相對應(yīng)的SQL語句,以使數(shù)據(jù)集中的數(shù)據(jù)來更新數(shù)據(jù)庫。50SqlDataAdapter類有以下構(gòu)造函數(shù):類有以下構(gòu)造函數(shù):SqlDataAdapter();SqlDataAdapter(selectCommand);SqlDataAdapter(s

47、electCommandText,selectConnection);SqlDataAdapter(selectCommandText,selectConnectionString);例:例:string mystr,mysql;SqlConnection myconn = new SqlConnection();mystr = Data Source=localhost;Initial Catalog=Stud; + Integrated Security=False;User Id=sa;Password=123456;myconn.ConnectionString = mystr;myc

48、onn.Open();mysql = SELECT * FROM student;SqlDataAdapter myadapter = new SqlDataAdapter(mysql,myconn);myconn.Close();51Fill方法用于向方法用于向DataSet對象填充從數(shù)據(jù)源中讀取的數(shù),對象填充從數(shù)據(jù)源中讀取的數(shù),語法格式有多種,常見格式如下:語法格式有多種,常見格式如下:SqlDataAdapter對象名對象名.Fill(DataSet對象名,對象名,表名表名);其中,第一參數(shù)是數(shù)據(jù)集對象名,表示要填充的數(shù)據(jù)集其中,第一參數(shù)是數(shù)據(jù)集對象名,表示要填充的數(shù)據(jù)集對象;第二參數(shù)是

49、字符串,表示在本地緩沖區(qū)中建立的臨時對象;第二參數(shù)是字符串,表示在本地緩沖區(qū)中建立的臨時表的名稱。表的名稱。如,以下語句用如,以下語句用course表數(shù)據(jù)填充數(shù)據(jù)集表數(shù)據(jù)填充數(shù)據(jù)集mydataset1:SqlDataAdapter1.Fill(mydataset1,course);52Update方法用于將數(shù)據(jù)集方法用于將數(shù)據(jù)集DataSet對象中的數(shù)據(jù)按對象中的數(shù)據(jù)按InsertCommand屬性、屬性、DeleteCommand屬性和屬性和UpdateCommand屬性所指定的要求更新數(shù)據(jù)源,即調(diào)用屬性所指定的要求更新數(shù)據(jù)源,即調(diào)用3個屬性中所定義的個屬性中所定義的SQL語句來更新數(shù)據(jù)源。

50、語句來更新數(shù)據(jù)源。Update方法常見調(diào)用格式如下。方法常見調(diào)用格式如下。SqlDataAdapter對象名對象名.Update(DataSet對象名對象名,數(shù)據(jù)表名數(shù)據(jù)表名);其中第一個參數(shù)是數(shù)據(jù)集對象名,表示要將哪個數(shù)據(jù)集對象其中第一個參數(shù)是數(shù)據(jù)集對象名,表示要將哪個數(shù)據(jù)集對象中的數(shù)據(jù)更新到數(shù)據(jù)源中;第二個參數(shù)是一個字符串,表示臨時中的數(shù)據(jù)更新到數(shù)據(jù)源中;第二個參數(shù)是一個字符串,表示臨時表的名稱。表的名稱。53DataSet是是ADO.NET數(shù)據(jù)庫訪問組件的核心,主要是用數(shù)據(jù)庫訪問組件的核心,主要是用來支持來支持ADO.NET的不連貫連接及數(shù)據(jù)分布。的不連貫連接及數(shù)據(jù)分布。數(shù)據(jù)駐留內(nèi)存,保

51、證和數(shù)據(jù)源無關(guān)的一致性的關(guān)系模型,數(shù)據(jù)駐留內(nèi)存,保證和數(shù)據(jù)源無關(guān)的一致性的關(guān)系模型,并用于多個異種數(shù)據(jù)源的數(shù)據(jù)操作。并用于多個異種數(shù)據(jù)源的數(shù)據(jù)操作。14.4.1 DataSet對象概述對象概述54創(chuàng)建創(chuàng)建DataSet對象有多種方法,既可用設(shè)計(jì)工具,也可用對象有多種方法,既可用設(shè)計(jì)工具,也可用程序代碼來創(chuàng)建。用代碼創(chuàng)建程序代碼來創(chuàng)建。用代碼創(chuàng)建DataSet對象的語法如下:對象的語法如下:DataSet 對象名對象名 = new DataSet();或或DataSet 對象名對象名 = new DataSet(dataSetName);其中,其中,dataSetName為一個字符串,指出為一個

52、字符串,指出DataSet的名稱。的名稱。55DataTable對象對象屬性說明CaseSensitive獲取或設(shè)置一個值,該值指示DataTable對象中的字符串比較是否區(qū)分大小寫DataSetName獲取或設(shè)置當(dāng)前DataSet的名稱Relations獲取用于將表鏈接起來并允許從父表瀏覽到子表的關(guān)系的集合Tables獲取包含在DataSet中的表的集合Tables:DataTable集合集合DataTable對象對象Columns:DataColumn集合集合Rows:DataRow集合集合DataTable對象對象DataColumn對象對象DataTable對象對象DataRow對象對

53、象DataSet56DataSet對象的方法說明AcceptChanges提交自加載此DataSet或上次調(diào)用AcceptChanges以來對其進(jìn)行的所有更改Clear通過移除所有表中的所有行來清除任何數(shù)據(jù)的DataSetCreateDataReader為每個DataTable返回帶有一個結(jié)果集的DataTableReader,順序與Tables集合中表的顯示順序相同GetChanges獲取DataSet的副本,該副本包含自上次加載以來或自調(diào)用AcceptChanges以來對該數(shù)據(jù)集進(jìn)行的所有更改HasChanges獲取一個值,該值指示DataSet是否有更改,包括新增行、已刪除的行或已修改的

54、行Merge將指定的DataSet、DataTable或DataRow對象的數(shù)組合并到當(dāng)前的DataSet或DataTable中Reset將DataSet重置為初始狀態(tài)57DataSet對象的對象的Tables屬性由表組成,每個表是一個屬性由表組成,每個表是一個DataTable對象。實(shí)際上,每一個對象。實(shí)際上,每一個DataTable對象代表了數(shù)據(jù)對象代表了數(shù)據(jù)庫中的一個表,每個庫中的一個表,每個DataTable數(shù)據(jù)表都由相應(yīng)的行和列組成。數(shù)據(jù)表都由相應(yīng)的行和列組成??赏ㄟ^索引來引用可通過索引來引用Tables集合中的一個表,例如,集合中的一個表,例如,Tablesi表示第表示第i個表,其

55、索引值從個表,其索引值從0開始編號。開始編號。58Tables集合的屬性說明CountTables集合中表個數(shù)Item檢索Tables集合中指定索引處的表Tables集合的方法說明Add向Tables集合中添加一個表AddRange向Tables集合中添加一個表的數(shù)組Clear移除Tables集合中的所有表Contains確定指定表是否在Tables集合中Equqls判斷是否等于當(dāng)前對象GetType獲取當(dāng)前實(shí)例的TypeInsert將一個表插入到Tables集合中指定的索引處IndexOf檢索指定的表在Tables集合中的索引Remove從Tables集合中移除指定的表RemoveAt移除T

56、ables集合中指定索引處的表59一個一個DataTable對象包含一個對象包含一個Columns屬性即列集合和一個屬性即列集合和一個Rows屬性即行集合。屬性即行集合。 屬性說明CaseSensitive指示表中的字符串比較是否區(qū)分大小寫ChildRelations獲取此DataTable的子關(guān)系的集合Columns獲取屬于該表的列的集合Constraints獲取由該表維護(hù)的約束的集合DataSet獲取此表所屬的DataSetDefaultView返回可用于排序、篩選和搜索DataTable的DataViewExtendedProperties獲取自定義用戶信息的集合ParentRelati

57、ons獲取該DataTable的父關(guān)系的集合PrimaryKey獲取或設(shè)置充當(dāng)數(shù)據(jù)表主鍵的列的數(shù)組Rows獲取屬于該表的行的集合TableName獲取或設(shè)置DataTable的名稱60方法說明AcceptChanges提交自上次調(diào)用AcceptChanges以來對該表進(jìn)行的所有更改Clear清除所有數(shù)據(jù)的DataTableCompute計(jì)算用來傳遞篩選條件的當(dāng)前行上的給定表達(dá)式CreateDataReader返回與此DataTable中的數(shù)據(jù)相對應(yīng)的DataTableReaderImportRow將DataRow復(fù)制到DataTable中,保留任何屬性設(shè)置以及初始值和當(dāng)前值Merge將指定的D

58、ataTable與當(dāng)前的DataTable合并NewRow創(chuàng)建與該表具有相同架構(gòu)的新DataRowSelect獲取DataRow對象的數(shù)組61(1)利用數(shù)據(jù)適配器的)利用數(shù)據(jù)適配器的Fill方法自動建立方法自動建立DataTable對象對象先通過先通過SqlDataAdapter對象從數(shù)據(jù)源中提取數(shù)據(jù),然后調(diào)用對象從數(shù)據(jù)源中提取數(shù)據(jù),然后調(diào)用Fill方法,將提取記錄存入方法,將提取記錄存入DataSet中對應(yīng)的表內(nèi),如中對應(yīng)的表內(nèi),如DataSet中中不存在對應(yīng)的表,會先建立表再將記錄填入。以下語句向不存在對應(yīng)的表,會先建立表再將記錄填入。以下語句向DataSet對象對象myds中添加一個表中添加一個表course及其包含的數(shù)據(jù)記錄:及其包含的數(shù)據(jù)記錄:DataSet myds = new DataSet();SqlDataAdapter myda = new SqlDataAdapter(SELECT * From course,myconn);myda.Fill(myds, course);62(2)將建立的)將建立的DataTable對象添加到對象添加到DataSet中中先建立先建立DataTable對象,然后調(diào)用對象,然后調(diào)用DataSet的表集合屬性的表集合屬性Tables的的Add方法,將方法,將DataTable對象添加到對象添加到DataSe

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論