![第6章 ADO.NET數(shù)據(jù)庫(kù)操作技術(shù)_第1頁(yè)](http://file4.renrendoc.com/view/d19c4bc4790052625c6bce812ce94d10/d19c4bc4790052625c6bce812ce94d101.gif)
![第6章 ADO.NET數(shù)據(jù)庫(kù)操作技術(shù)_第2頁(yè)](http://file4.renrendoc.com/view/d19c4bc4790052625c6bce812ce94d10/d19c4bc4790052625c6bce812ce94d102.gif)
![第6章 ADO.NET數(shù)據(jù)庫(kù)操作技術(shù)_第3頁(yè)](http://file4.renrendoc.com/view/d19c4bc4790052625c6bce812ce94d10/d19c4bc4790052625c6bce812ce94d103.gif)
![第6章 ADO.NET數(shù)據(jù)庫(kù)操作技術(shù)_第4頁(yè)](http://file4.renrendoc.com/view/d19c4bc4790052625c6bce812ce94d10/d19c4bc4790052625c6bce812ce94d104.gif)
![第6章 ADO.NET數(shù)據(jù)庫(kù)操作技術(shù)_第5頁(yè)](http://file4.renrendoc.com/view/d19c4bc4790052625c6bce812ce94d10/d19c4bc4790052625c6bce812ce94d105.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本章要求:第6章ADO.NET數(shù)據(jù)庫(kù)操作技術(shù)ADO.NET技術(shù)簡(jiǎn)介ADO.NET中的7個(gè)主要對(duì)象及其屬性、方法如何打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接使用SQL語(yǔ)句執(zhí)行數(shù)據(jù)的增、刪、改、查操作使用存儲(chǔ)過(guò)程執(zhí)行數(shù)據(jù)的增、刪、改、查操作如何在ASP.NET程序中使用事務(wù)數(shù)據(jù)的批量更新操作使用二進(jìn)制格式在數(shù)據(jù)庫(kù)中存取圖片主要內(nèi)容1.ADO.NET概述2.ADO.NET對(duì)象模型3.數(shù)據(jù)庫(kù)開(kāi)發(fā)基本操作4.綜合實(shí)例——批量更新供求信息發(fā)布時(shí)間第6章ADO.NET數(shù)據(jù)庫(kù)操作技術(shù)6.1ADO.NET概述ADO.NET是微軟新一代.NET數(shù)據(jù)庫(kù)的訪問(wèn)架構(gòu),ADO是ActiveXDataObjects的縮寫。ADO.NET是數(shù)據(jù)庫(kù)應(yīng)用程序和數(shù)據(jù)源之間溝通的橋梁,主要提供一個(gè)面向?qū)ο蟮臄?shù)據(jù)訪問(wèn)架構(gòu),用來(lái)開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序。為了更好的理解ADO.NET的架構(gòu)模型的各個(gè)組成部分,我們可以對(duì)ADO.NET中的相關(guān)對(duì)象進(jìn)行圖示理解,如圖6-1所示的是ADO.NET中數(shù)據(jù)庫(kù)對(duì)象的關(guān)系圖。圖6-1ADO.NET中數(shù)據(jù)庫(kù)對(duì)象的關(guān)系圖6.2.1Connection對(duì)象6.2.2Command對(duì)象6.2.3DataReader對(duì)象6.2.4DataAdapter對(duì)象6.2.5DataSet對(duì)象6.2.6DataTable對(duì)象6.2.7DataView對(duì)象6.2ADO.NET對(duì)象模型Connection對(duì)象用于連接到數(shù)據(jù)庫(kù)和管理對(duì)數(shù)據(jù)庫(kù)的事務(wù),該對(duì)象提供一些方法,允許開(kāi)發(fā)人員與數(shù)據(jù)源建立連接或者斷開(kāi)連接。微軟公司提供了4種數(shù)據(jù)提供程序的連接對(duì)象,分別如下:SQLServer.NET數(shù)據(jù)提供程序的SqlConnection連接對(duì)象,命名空間System.Data.SqlClient.SqlConnection。OLEDB.NET數(shù)據(jù)提供程序的OleDbConnection連接對(duì)象,命名空間System.Data.OleDb.OleDbConnection。ODBC.NET數(shù)據(jù)提供程序的OdbcConnection連接對(duì)象,命名空間System.Data.Odbc.OdbcConnection。Oracle.NET數(shù)據(jù)提供程序的OracleConnection連接對(duì)象,命名空間System.Data.OracleClient.OracleConnection。6.2.1Connection對(duì)象Connection對(duì)象常用屬性如表6-1所示。表6-1 Connection對(duì)象常用屬性Connection對(duì)象常用方法如表6-2所示。表6-2 Connection對(duì)象常用方法屬性說(shuō)明ConnectionString獲取或設(shè)置用于打開(kāi)數(shù)據(jù)庫(kù)的字符串ConnectionTimeout獲取在嘗試建立連接時(shí)終止嘗試并生成錯(cuò)誤之前所等待的時(shí)間Database獲取當(dāng)前數(shù)據(jù)庫(kù)或連接打開(kāi)后要使用的數(shù)據(jù)庫(kù)的名稱DataSource獲取要連接的數(shù)據(jù)庫(kù)服務(wù)器名稱State指示數(shù)據(jù)庫(kù)的連接狀態(tài)方法說(shuō)明BeginTransaction開(kāi)始數(shù)據(jù)庫(kù)事務(wù)ChangeDatabase更改當(dāng)前數(shù)據(jù)庫(kù)ChangePassword將連接字符串中指示的用戶的數(shù)據(jù)庫(kù)密碼更改為提供的新密碼ClearAllPools清空連接池Close關(guān)閉與數(shù)據(jù)庫(kù)的連接CreateCommand創(chuàng)建并返回一個(gè)與Connection關(guān)聯(lián)的Command對(duì)象Dispose釋放由Connection使用的所有資源Open使用ConnectionString屬性所指定的屬性設(shè)置打開(kāi)數(shù)據(jù)庫(kù)連接
Command對(duì)象用來(lái)對(duì)數(shù)據(jù)源執(zhí)行查詢、添加、刪除和修改等各種操作,操作實(shí)現(xiàn)的方式可以是使用SQL語(yǔ)句,也可以是使用存儲(chǔ)過(guò)程。根據(jù)所用的.NETFramework數(shù)據(jù)提供程序的不同,Command對(duì)象也可以分成4種,分別是SqlCommand、OleDbCommand、OdbcCommand和OracleCommand,在實(shí)際的編程過(guò)程中應(yīng)根據(jù)訪問(wèn)的數(shù)據(jù)源不同,選擇相應(yīng)的Command對(duì)象。Command對(duì)象常用屬性如表6-3所示。表6-3 Command對(duì)象常用屬性6.2.2Command對(duì)象屬性說(shuō)明CommandType獲取或設(shè)置Command對(duì)象要執(zhí)行命令的類型CommandText獲取或設(shè)置要對(duì)數(shù)據(jù)源執(zhí)行的SQL語(yǔ)句或存儲(chǔ)過(guò)程名或表名CommandTimeOut獲取或設(shè)置在終止對(duì)執(zhí)行命令的嘗試并生成錯(cuò)誤之前的等待時(shí)間Connection獲取或設(shè)置此Command對(duì)象使用的Connection對(duì)象的名稱Parameters獲取Command對(duì)象需要使用的參數(shù)集合Transaction獲取或設(shè)置將在其中執(zhí)行Command的SqlTransactionCommand對(duì)象常用方法如表6-4所示。表6-4 Command對(duì)象常用方法方法說(shuō)明ExecuteNonQuery用于執(zhí)行非SELECT命令,比如INSERT、DELETE或者UPDATE命令,返回三個(gè)命令所影響的數(shù)據(jù)的行數(shù)。也可以用ExecuteNonQuery()來(lái)執(zhí)行一些數(shù)據(jù)定義命令,比如新建、更新、刪除數(shù)據(jù)庫(kù)對(duì)象(如表、索引等)ExecuteScalar用于執(zhí)行SELECT查詢命令,返回?cái)?shù)據(jù)中第一行第一列的值。這個(gè)方法通常用來(lái)執(zhí)行那些用到COUNT()或SUM()函數(shù)的SELECT命令。ExecuteReader執(zhí)行SELECT命令,并返回一個(gè)DataReader對(duì)象。這個(gè)DataReader是向前只讀的數(shù)據(jù)集6.2.3DataReader對(duì)象DataReader對(duì)象是一個(gè)簡(jiǎn)單的數(shù)據(jù)集,如其名一樣,用于從數(shù)據(jù)源中讀取只讀的數(shù)據(jù)集,常用于檢索大量數(shù)據(jù)。根據(jù).NETFramework數(shù)據(jù)提供程序不同,DataReader可以分成SqlDataReader、OleDbDataReader等幾類。DataReader每次只能在內(nèi)存中保留一行,所以開(kāi)銷非常小。使用DataReader對(duì)象讀取數(shù)據(jù)時(shí),必須一直保持與數(shù)據(jù)庫(kù)的連接,所以也被稱為連線模式,其架構(gòu)如圖6-2所示。
圖6-2SqlDataReader讀取數(shù)據(jù)時(shí),必須一直保持與數(shù)據(jù)庫(kù)的連接說(shuō)明:DataReader是一個(gè)輕量級(jí)的數(shù)據(jù)對(duì)象,如果只需要將數(shù)據(jù)讀出并顯示,那它是最合適的工具,它的讀取速度比稍后要講解的DataSet對(duì)象要快,占用的資源也比DataSet少。但是,一定要銘記,DataReader在讀取數(shù)據(jù)時(shí),要求數(shù)據(jù)庫(kù)保持在連接狀態(tài),讀取完數(shù)據(jù)之后才能斷開(kāi)連接。DataReader對(duì)象常用屬性如表6-5所示。表6-5 DataReader對(duì)象常用屬性DataReader對(duì)象常用方法如表6-6所示。表6-6 DataReader對(duì)象常用方法屬性說(shuō)明Connection獲取與DataReader關(guān)聯(lián)的Connection對(duì)象HasRows判斷數(shù)據(jù)庫(kù)中是否有數(shù)據(jù)FieldCount獲取當(dāng)前行的列數(shù)IsClosed檢索一個(gè)布爾值,該值指示是否已關(guān)閉指定的DataReader實(shí)例Item在給定列序號(hào)或列名稱的情況下,獲取指定列的以本機(jī)格式表示的值RecordsAffected獲取執(zhí)行SQL語(yǔ)句所更改、添加或刪除的行數(shù)方法說(shuō)明IsDBNull獲取一個(gè)值,用于指示列中是否包含不存在的或缺少的值Read使DataReader對(duì)象前進(jìn)到下一條記錄NextResult當(dāng)讀取批處理Transact-SQL語(yǔ)句的結(jié)果時(shí),使數(shù)據(jù)讀取器前進(jìn)到下一個(gè)結(jié)果Close關(guān)閉DataReader對(duì)象Get用來(lái)讀取數(shù)據(jù)集的當(dāng)前行的某一列的數(shù)據(jù)6.2.4DataAdapter對(duì)象DataAdapter(即數(shù)據(jù)適配器)對(duì)象是一種用來(lái)充當(dāng)DataSet對(duì)象與實(shí)際數(shù)據(jù)源之間橋梁的對(duì)象,可以說(shuō)只要有DataSet的地方就有它,它也是專門為DataSet服務(wù)的。DataAdapter對(duì)象的工作步驟一般有兩種:一種是通過(guò)Command對(duì)象執(zhí)行SQL語(yǔ)句從數(shù)據(jù)源中檢索數(shù)據(jù),將獲取的結(jié)果集填充到DataSet對(duì)象的表中;另一種是把用戶對(duì)DataSet對(duì)象做出的更改寫入到數(shù)據(jù)源中。說(shuō)明:在.NETFramework中主要使用兩種DataAdapter對(duì)象,即OleDbDataAdapter和SqlDataAdapter。OleDbDataAdapter對(duì)象適用于OLEDB數(shù)據(jù)源,SqlDataAdapter對(duì)象適用于SQLServer7.0或更高版本。DataAdapter對(duì)象常用屬性如表6-7所示。表6-7 DataAdapter對(duì)象常用屬性屬性說(shuō)明SelectCommand獲取或設(shè)置用于在數(shù)據(jù)源中選擇記錄的命令I(lǐng)nsertCommand獲取或設(shè)置用于將新記錄插入到數(shù)據(jù)源中的命令UpdateCommand獲取或設(shè)置用于更新數(shù)據(jù)源中記錄的命令DeleteCommand獲取或設(shè)置用于從數(shù)據(jù)集中刪除記錄的命令DataAdapter對(duì)象常用方法如表6-8所示。表6-8 DataAdapter對(duì)象常用方法方法說(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ù)源6.2.5DataSet對(duì)象DataSet是ADO.NET的核心成員之一,它是支持ADO.NET斷開(kāi)式、分布式數(shù)據(jù)方案的核心對(duì)象,也是實(shí)現(xiàn)基于非連接的數(shù)據(jù)查詢的核心組件。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ù)模型如圖6-3所示。圖6-3DataSet數(shù)據(jù)模型DataSet對(duì)象常用屬性如表6-9所示。表6-9DataSet對(duì)象常用屬性DataSet對(duì)象常用方法如表6-10所示。表6-10 DataSet對(duì)象常用方法屬性說(shuō)明Relations獲取用于將表鏈接起來(lái)并允許從父表瀏覽到子表的關(guān)系的集合Tables獲取包含在DataSet中的表的集合方法說(shuō)明AcceptChanges提交自加載此DataSet或上次調(diào)用AcceptChanges以來(lái)對(duì)其進(jìn)行的所有更改Clear通過(guò)移除所有表中的所有行來(lái)清除任何數(shù)據(jù)的DataSetClone復(fù)制DataSet的結(jié)構(gòu),包括所有DataTable架構(gòu)、關(guān)系和約束。不要復(fù)制任何數(shù)據(jù)Copy復(fù)制該DataSet的結(jié)構(gòu)和數(shù)據(jù)GetXml返回存儲(chǔ)在DataSet中的數(shù)據(jù)的XML表示形式Merge將指定的DataSet及其架構(gòu)合并到當(dāng)前DataSet中ReadXml使用指定的文件或流將XML架構(gòu)和數(shù)據(jù)讀入DataSetWriteXml將DataSet的當(dāng)前數(shù)據(jù)寫入指定的文件或者流中6.2.6DataTable對(duì)象在ADO.NET中,DataTable對(duì)象用于表示DataSet中的表。DataTable表示一個(gè)內(nèi)存內(nèi)關(guān)系數(shù)據(jù)的表;數(shù)據(jù)對(duì)于所處的基于.NET的應(yīng)用程序來(lái)說(shuō)是本地?cái)?shù)據(jù),但可從數(shù)據(jù)源(例如,使用DataAdapter的MicrosoftSQLServer)中導(dǎo)入。DataTable類是.NETFramework類庫(kù)中System.Data命名空間的成員。用戶可以獨(dú)立創(chuàng)建和使用DataTable,也可以作為DataSet的成員創(chuàng)建和使用,而且DataTable對(duì)象也可以與其他.NETFramework對(duì)象(包括DataView)一起使用,另外,用戶可以通過(guò)DataSet對(duì)象的Tables屬性來(lái)訪問(wèn)DataSet中表的集合。DataTable對(duì)象常用屬性如表6-11所示。表6-11 DataTable對(duì)象常用屬性屬性說(shuō)明ChildRelations獲取DataTable的子關(guān)系的集合Columns獲取屬于該表的列的集合Constraints獲取由該表維護(hù)的約束的集合DefaultView獲取可能包括篩選視圖或游標(biāo)位置的表的自定義視圖Rows獲取屬于該表的行的集合DataTable對(duì)象常用方法如表6-12所示。表6-12 DataTable對(duì)象常用方法方法說(shuō)明AcceptChanges提交自上次調(diào)用AcceptChanges以來(lái)對(duì)該表進(jìn)行的所有更改BeginLoadData在加載數(shù)據(jù)時(shí)關(guān)閉通知、索引維護(hù)和約束Clear清除所有數(shù)據(jù)的DataTableImportRow將DataRow復(fù)制到DataTable中,保留任何屬性設(shè)置以及初始值和當(dāng)前值Load使用指定數(shù)據(jù)源的值填充DataTable。如果DataTable已經(jīng)包含行,則從數(shù)據(jù)源傳入的數(shù)據(jù)將與現(xiàn)有的行合并Merge將指定的DataTable與當(dāng)前的DataTable合并NewRow創(chuàng)建與該表具有相同架構(gòu)的新DataRowNewRowFromBuilder從現(xiàn)有的行創(chuàng)建新行ReadXml使用指定的文件或流將XML架構(gòu)和數(shù)據(jù)讀入DataTableSelect獲取所有DataRow對(duì)象的數(shù)組WriteXml將DataTable的當(dāng)前數(shù)據(jù)寫入指定的文件或者流中6.2.7DataView對(duì)象在ADO.NET中,DataView對(duì)象表示用于排序、篩選、搜索、編輯和導(dǎo)航的DataTable的可綁定數(shù)據(jù)的自定義視圖;另外,可以自定義DataView來(lái)表示DataTable中數(shù)據(jù)的子集,該功能讓用戶擁有綁定到同一DataTable、但顯示不同數(shù)據(jù)版本的兩個(gè)控件。例如,一個(gè)控件可能綁定到顯示表中所有行的DataView,而另一個(gè)控件可能配置為只顯示已從DataTable刪除的行。DataTable也具有DefaultView屬性,它返回表的默認(rèn)DataView。DataView對(duì)象常用屬性如表6-13所示。表6-13 DataView對(duì)象常用屬性屬性說(shuō)明AllowDelete設(shè)置或獲取一個(gè)值,該值指示是否允許刪除AllowEdit獲取或設(shè)置一個(gè)值,該值指示是否允許編輯AllowNew獲取或設(shè)置一個(gè)值,該值指示是否可以使用AddNew方法添加新行ApplyDefaultSort獲取或設(shè)置一個(gè)值,該值指示是否使用默認(rèn)排序Count在應(yīng)用RowFilter和RowStateFilter之后,獲取DataView中記錄的數(shù)量IsOpen獲取一個(gè)值,該值指示數(shù)據(jù)源當(dāng)前是否已打開(kāi)并在DataTable上映射數(shù)據(jù)視圖Item從指定的表獲取一行數(shù)據(jù)RowFilter獲取或設(shè)置用于篩選在DataView中查看哪些行的表達(dá)式RowStateFilter獲取或設(shè)置用于DataView中的行狀態(tài)篩選器Sort獲取或設(shè)置DataView的一個(gè)或多個(gè)排序列以及排序順序Table獲取或設(shè)置源DataTableDataView對(duì)象常用方法如表6-14所示。表6-14 DataView對(duì)象常用方法方法說(shuō)明AddNew將新行添加到DataView中Close關(guān)閉DataViewDelete刪除指定索引位置的行Find按指定的排序關(guān)鍵字值在DataView中查找行FindRows返回DataRowView對(duì)象的數(shù)組,這些對(duì)象的列與指定的排序關(guān)鍵字值匹配Open打開(kāi)一個(gè)DataViewToTable根據(jù)現(xiàn)有DataView中的行,創(chuàng)建并返回一個(gè)新的DataTable6.3數(shù)據(jù)庫(kù)開(kāi)發(fā)基本操作6.3.1打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接6.3.2查詢數(shù)據(jù)庫(kù)中數(shù)據(jù)6.3.3向數(shù)據(jù)庫(kù)中添加數(shù)據(jù)6.3.4修改數(shù)據(jù)庫(kù)中數(shù)據(jù)6.3.5刪除數(shù)據(jù)庫(kù)中數(shù)據(jù)6.3.6使用事務(wù)6.3.1打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接分別使用SqlConnection對(duì)象的Open方法和Close方法,下面通過(guò)具體的實(shí)例進(jìn)行講解?!纠?-1】本實(shí)例分別使用SqlConnection對(duì)象的Open方法和Close方法打開(kāi)和關(guān)閉SQLServer數(shù)據(jù)庫(kù)連接。實(shí)例運(yùn)行效果如圖6-4所示。圖6-4打開(kāi)和關(guān)閉數(shù)據(jù)庫(kù)連接程序開(kāi)發(fā)步驟如下:(1)新建一個(gè)ASP.NET網(wǎng)站,默認(rèn)主頁(yè)為Default.aspx。(2)Default.aspx頁(yè)面加載時(shí),首先創(chuàng)建SqlConnection對(duì)象,并使用Open方法打開(kāi)數(shù)據(jù)庫(kù)連接;然后使用SqlConnection對(duì)象的State判斷數(shù)據(jù)庫(kù)連接的狀態(tài),如果是打開(kāi)狀態(tài),則使用Close方法關(guān)閉數(shù)據(jù)庫(kù)連接。代碼如下:protectedvoidPage_Load(objectsender,EventArgse){//創(chuàng)建連接數(shù)據(jù)庫(kù)的字符串
stringSqlStr="Server=MRWXK\\MRWXK;UserId=sa;Pwd=;DataBase=db_ASPNET";SqlConnectioncon=newSqlConnection(SqlStr); //創(chuàng)建SqlConnection對(duì)象
con.Open(); //打開(kāi)數(shù)據(jù)庫(kù)的連接
if(con.State==System.Data.ConnectionState.Open){Response.Write("SQLServer數(shù)據(jù)庫(kù)連接開(kāi)啟!<p/>");con.Close(); //關(guān)閉數(shù)據(jù)庫(kù)的連接
}if(con.State==System.Data.ConnectionState.Closed){Response.Write("SQLServer數(shù)據(jù)庫(kù)連接關(guān)閉!<p/>");}}
1.使用SQL語(yǔ)句查詢【例6-2】本實(shí)例主要演示如何使用SQL語(yǔ)句從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)的功能,實(shí)例運(yùn)行效果如圖6-5所示。圖6-5使用SQL語(yǔ)句查詢數(shù)據(jù)6.3.2查詢數(shù)據(jù)庫(kù)中數(shù)據(jù)程序開(kāi)發(fā)步驟如下:(1)新建一個(gè)ASP.NET網(wǎng)站,在Default.aspx頁(yè)面中添加一個(gè)GridView控件,用來(lái)顯示從數(shù)據(jù)庫(kù)中查詢到的數(shù)據(jù)。(2)頁(yè)面加載時(shí),通過(guò)SQL語(yǔ)句從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù),并綁定到GridView控件上,代碼如下:protectedvoidPage_Load(objectsender,EventArgse){stringstrCon="DataSource=MRWXK\\MRWXK;Database=db_ASPNET;uid=sa;pwd=;";SqlConnectionsqlcon=newSqlConnection(strCon); //創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象SqlDataAdaptersqlda=newSqlDataAdapter(); //創(chuàng)建SqlDataAdapter對(duì)象//給SqlDataAdapter的SelectCommand賦值sqlda.SelectCommand=newSqlCommand("select*fromtb_mrbccd",sqlcon);DataSetds=newDataSet(); //創(chuàng)建DataSet對(duì)象sqlda.Fill(ds); //填充數(shù)據(jù)集GridView1.DataSource=ds; //設(shè)置GridView數(shù)據(jù)源GridView1.DataBind(); //數(shù)據(jù)綁定}2.使用存儲(chǔ)過(guò)程查詢【例6-3】使用存儲(chǔ)過(guò)程實(shí)現(xiàn)例6-2的功能,代碼如下:。protectedvoidPage_Load(objectsender,EventArgse){stringstrCon="DataSource=MRWXK\\MRWXK;Database=db_ASPNET;uid=sa;pwd=;";SqlConnectionsqlcon=newSqlConnection(strCon); //創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象SqlDataAdaptersqlda=newSqlDataAdapter(); //創(chuàng)建SqlDataAdapter對(duì)象//給SqlDataAdapter的SelectCommand賦值sqlda.SelectCommand=newSqlCommand("proc_Select",sqlcon);sqlda.SelectCommand.CommandType=CommandType.StoredProcedure;//指定執(zhí)行存儲(chǔ)過(guò)程DataSetds=newDataSet(); //創(chuàng)建DataSet對(duì)象sqlda.Fill(ds); //填充數(shù)據(jù)集GridView1.DataSource=ds; //設(shè)置GridView數(shù)據(jù)源GridView1.DataBind(); //數(shù)據(jù)綁定調(diào)用的存儲(chǔ)過(guò)程代碼如下:CREATEPROCEDUREproc_SelectASBEGIN SELECT*fromtb_mrbccdEND說(shuō)明:存儲(chǔ)過(guò)程(StoredProcedure)是預(yù)編譯SQL語(yǔ)句的集合,這些語(yǔ)句存儲(chǔ)在一個(gè)名稱下并作為一個(gè)單元來(lái)處理。存儲(chǔ)過(guò)程代替了傳統(tǒng)的逐條執(zhí)行SQL語(yǔ)句的方式,一個(gè)存儲(chǔ)過(guò)程中可以包含查詢、插入、刪除、更新等操作的一系列SQL語(yǔ)句,當(dāng)這個(gè)存儲(chǔ)過(guò)程被調(diào)用執(zhí)行時(shí),這些操作也會(huì)同時(shí)執(zhí)行。6.3.3向數(shù)據(jù)庫(kù)中添加數(shù)據(jù)1.使用SQL語(yǔ)句添加【例6-4】本實(shí)例主要講解如何使用SQL語(yǔ)句向數(shù)據(jù)庫(kù)添加記錄。執(zhí)行程序,實(shí)例運(yùn)行結(jié)果如圖6-6所示;在編程詞典版本的輸入文本框中,輸入商品名稱“ASP.NET編程詞典”,在價(jià)格欄中填寫價(jià)格后,然后單擊“執(zhí)行添加操作”按鈕,將編程詞典商品名稱及價(jià)格添加到數(shù)據(jù)庫(kù)中。圖6-6使用SQL語(yǔ)句添加數(shù)據(jù)程序開(kāi)發(fā)步驟如下:(1)新建一個(gè)網(wǎng)站,默認(rèn)主頁(yè)為Default.aspx,在Default.aspx頁(yè)面上添加兩個(gè)TextBox控件和一個(gè)Button控件,分別用來(lái)輸入版本、價(jià)格和執(zhí)行添加操作。(2)在“執(zhí)行添加操作”按鈕的Click事件下,使用Command對(duì)象將文本框中的數(shù)據(jù)添加到數(shù)據(jù)庫(kù)中,代碼如下:protectedvoidbtInsert_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection("Server=MRWXK\\MRWXK;UserId=sa;Pwd=;DataBase=db_ASPNET"); //創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
stringstrsql="insertintotb_mrbccd(brccdName,brccdPrice)values('"+txtBrccdName.Text+"','"+txtBrccdPrice.Text+"')";SqlCommandcomm=newSqlCommand(strsql,conn); //創(chuàng)建SqlCommand對(duì)象
if(conn.State.Equals(ConnectionState.Closed)) //打開(kāi)數(shù)據(jù)庫(kù)連接
{conn.Open();}//判斷ExecuteNonQuery方法返回的參數(shù)是否大于0,大于0表示添加成功
if(Convert.ToInt32(comm.ExecuteNonQuery())>0){Response.Write("信息提示:添加成功!");}else{Response.Write("信息提示:添加失?。?);}if(conn.State.Equals(ConnectionState.Open)) //關(guān)閉數(shù)據(jù)庫(kù)連接
conn.Close();}2.使用存儲(chǔ)過(guò)程添加【例6-5】使用存儲(chǔ)過(guò)程實(shí)現(xiàn)例6-4的功能,代碼如下:。protectedvoidbtnInsert_Click(objectsender,EventArgse){//創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//創(chuàng)建命令對(duì)象,并指定存儲(chǔ)過(guò)程名稱
SqlCommandcmd=newSqlCommand("proc_Insert",con);cmd.CommandType=CommandType.StoredProcedure; //指定命令類型為存儲(chǔ)過(guò)程
cmd.Parameters.Add(newSqlParameter("@BccdName",SqlDbType.VarChar,50));cmd.Parameters["@BccdName"].Value=this.txtBccdName.Text;cmd.Parameters.Add(newSqlParameter("@BccdPrice",SqlDbType.Decimal,9));cmd.Parameters["@BccdPrice"].Value=this.txtBccdPrice.Text;if(con.State==ConnectionState.Closed){con.Open();}intrecords=Convert.ToInt32(cmd.ExecuteNonQuery());if(records>0)Response.Write("信息提示:添加成功!");elseResponse.Write("信息提示:添加失??!");cmd.Dispose();con.Close(); //關(guān)閉數(shù)據(jù)連接}調(diào)用的存儲(chǔ)過(guò)程代碼如下:CREATEPROCEDUREproc_Insert(@BccdName[Varchar](50),@BccdPricedecimal)/*指明該存儲(chǔ)過(guò)程中將要執(zhí)行的動(dòng)作*/ASINSERTINTOtb_mrbccd(brccdName,brccdPrice)VALUES(@BccdName,@BccdPrice)GO6.3.4修改數(shù)據(jù)庫(kù)中數(shù)據(jù)1.使用SQL語(yǔ)句修改【例6-6】本實(shí)例主要演示如何使用SQL語(yǔ)句修改數(shù)據(jù)庫(kù)中數(shù)據(jù)的功能。運(yùn)行程序,在兩個(gè)TextBox控件中分別輸入要修改的數(shù)據(jù),單擊“執(zhí)行修改操作”按鈕,即可修改指定的數(shù)據(jù),運(yùn)行效果如圖6-7所示。
圖6-7使用SQL語(yǔ)句修改數(shù)據(jù)程序開(kāi)發(fā)步驟如下:(1)新建一個(gè)網(wǎng)站,默認(rèn)主頁(yè)為Default.aspx,在Default.aspx頁(yè)面上添加兩個(gè)TextBox控件和一個(gè)Button控件,分別用來(lái)輸入要修改的版本和價(jià)格信息,并執(zhí)行數(shù)據(jù)修改操作。(2)當(dāng)輸入要修的商品名稱后,單擊“執(zhí)行修改操作”按鈕,在該按鈕的Click事件下,使用SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)中的指定數(shù)據(jù)進(jìn)行修改,代碼如下:protectedvoidButton1_Click(objectsender,EventArgse){//建立數(shù)據(jù)庫(kù)鏈接
SqlConnectionmyConn=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//定義查詢SQL語(yǔ)句
stringsqlStr="updatetb_mrbccdsetbrccdName='"+txtBccdName.Text+"',brccdPrice='"+txtBccdPrice.Text+"'whereid=1";SqlCommandmyCmd=newSqlCommand(sqlStr,myConn); //初始化查詢命令
if(myConn.State==ConnectionState.Closed) //打開(kāi)數(shù)據(jù)庫(kù)鏈接
{myConn.Open();}intrecords=Convert.ToInt32(myCmd.ExecuteNonQuery());if(records>0)Response.Write("修改成功!更新了"+records.ToString()+"條數(shù)據(jù)!");elseResponse.Write("信息提示:修改失??!");myCmd.Dispose();myConn.Close(); //關(guān)閉數(shù)據(jù)庫(kù)連接}2.使用存儲(chǔ)過(guò)程修改【例6-7】使用存儲(chǔ)過(guò)程實(shí)現(xiàn)例6-6的功能,代碼如下:。protectedvoidButton1_Click(objectsender,EventArgse){//建立數(shù)據(jù)庫(kù)鏈接
SqlConnectionmyConn=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//指定存儲(chǔ)過(guò)程名稱
SqlCommandmyCmd=newSqlCommand("proc_Update",myConn);myCmd.CommandType=CommandType.StoredProcedure;myCmd.Parameters.Add(newSqlParameter("@BccdName",SqlDbType.VarChar,50));myCmd.Parameters["@BccdName"].Value=this.txtBccdName.Text;myCmd.Parameters.Add(newSqlParameter("@BccdPrice",SqlDbType.Decimal,9));myCmd.Parameters["@BccdPrice"].Value=this.txtBccdPrice.Text;//打開(kāi)數(shù)據(jù)庫(kù)鏈接
if(myConn.State==ConnectionState.Closed){myConn.Open();}intrecords=Convert.ToInt32(myCmd.ExecuteNonQuery());if(records>0)Response.Write("修改成功!更新了"+records.ToString()+"條數(shù)據(jù)!");elseResponse.Write("信息提示:修改失??!");myCmd.Dispose();myConn.Close();}調(diào)用的存儲(chǔ)過(guò)程代碼如下:CREATEPROCEDUREproc_Update(@BccdName[Varchar](50),@BccdPricedecimal)ASupdatetb_mrbccdsetbrccdName=@BccdName,brccdPrice=@BccdPricewhereid=1GO6.3.5刪除數(shù)據(jù)庫(kù)中數(shù)據(jù)1.使用SQL語(yǔ)句刪除【例6-8】本實(shí)例主要演示如何使用SQL語(yǔ)句刪除數(shù)據(jù)庫(kù)中數(shù)據(jù)的功能。運(yùn)行程序,在TextBox控件中輸入要?jiǎng)h除的信息的編號(hào),單擊“執(zhí)行刪除操作”按鈕,即可刪除指定的數(shù)據(jù),運(yùn)行效果如圖6-8所示。
圖6-8使用SQL語(yǔ)句刪除數(shù)據(jù)程序開(kāi)發(fā)步驟如下:(1)新建一個(gè)網(wǎng)站,默認(rèn)主頁(yè)為Default.aspx,在Default.aspx頁(yè)面上添加一個(gè)TextBox控件、一個(gè)Button按鈕和一個(gè)Lable控件,分別用來(lái)輸入要?jiǎng)h除的編程詞典版本編號(hào)、執(zhí)行刪除操作和顯示提示信息。(2)當(dāng)在文本框輸入ID號(hào)碼后,單擊“執(zhí)行刪除操作”按鈕,使用SQL語(yǔ)句實(shí)現(xiàn)刪除指定信息的功能,代碼如下:protectedvoidbtnDelete_Click(objectsender,EventArgse){intmrbccdId=Convert.ToInt32(this.txtbccdID.Text.Trim());if(mrbccdId>0) //簡(jiǎn)單的數(shù)據(jù)驗(yàn)證
{//創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");SqlCommandcmd=newSqlCommand("deletefromtb_mrbccdwhereid='"+Convert.ToInt32(txtbccdID.Text)+"'",con); //創(chuàng)建SqlCommad命令對(duì)象
con.Open(); //打開(kāi)數(shù)據(jù)庫(kù)連接
cmd.ExecuteNonQuery(); //執(zhí)行刪除操作
lblError.Text="刪除成功!";con.Close();}else{//當(dāng)用戶輸入的版本號(hào)不為正整數(shù)時(shí)給予提示
lblError.Text="版本編號(hào)必須是正整數(shù)!";}}2.使用存儲(chǔ)過(guò)程修改【例6-9】使用存儲(chǔ)過(guò)程實(shí)現(xiàn)例6-8的功能,代碼如下:。protectedvoidbtnDelete_Click(objectsender,EventArgse){intmrbccdId=Convert.ToInt32(this.txtbccdID.Text.Trim());if(mrbccdId>0) //簡(jiǎn)單的數(shù)據(jù)驗(yàn)證//創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//指定存儲(chǔ)過(guò)程名稱
SqlCommandcmd=newSqlCommand("proc_Delete",con);cmd.CommandType=CommandType.StoredProcedure;cmd.Parameters.Add("@id",SqlDbType.Int).Value=txtbccdID.Text;con.Open(); //打開(kāi)數(shù)據(jù)庫(kù)連接
cmd.ExecuteNonQuery(); //執(zhí)行刪除操作
lblError.Text="刪除成功!";con.Close();}else//當(dāng)用戶輸入的版本號(hào)不為正整數(shù)時(shí)給予提示
lblError.Text="版本編號(hào)必須是正整數(shù)!";調(diào)用的存儲(chǔ)過(guò)程代碼如下:CREATEPROCEDUREproc_Delete(@idint)ASdeletefromtb_mrbccdwhereid=@idGO6.3.6使用事務(wù)事務(wù)是由一系列語(yǔ)句構(gòu)成的邏輯工作單元,事務(wù)和存儲(chǔ)過(guò)程等批處理有一定程度上的相似之處,通常都是為了完成一定業(yè)務(wù)邏輯而將一條或者多條語(yǔ)句“封裝”起來(lái),使它們與其他語(yǔ)句之間出現(xiàn)一個(gè)邏輯上的邊界,并形成相對(duì)獨(dú)立的一個(gè)工作單元。當(dāng)使用事務(wù)對(duì)多個(gè)數(shù)據(jù)表操作時(shí),如果在處理的過(guò)程中出現(xiàn)了某種錯(cuò)誤,例如系統(tǒng)死機(jī)或突然斷電等情況,則返回結(jié)果是數(shù)據(jù)全部沒(méi)有被保存,因?yàn)槭聞?wù)處理的結(jié)果只有兩種:一種是在事務(wù)處理的過(guò)程中,如果發(fā)生了某種錯(cuò)誤則整個(gè)事務(wù)全部回滾,使所有對(duì)數(shù)據(jù)的修改全部撤銷,事務(wù)對(duì)數(shù)據(jù)庫(kù)的操作是單步執(zhí)行的,當(dāng)遇到錯(cuò)誤時(shí)可以隨時(shí)地回滾;另一種是如果沒(méi)有發(fā)生任何錯(cuò)誤且每一步的執(zhí)行都成功,則整個(gè)事務(wù)全部被提交。從這里可以看出,有效的使用事務(wù)不但可以提高數(shù)據(jù)的安全性,而且還可以增強(qiáng)數(shù)據(jù)的處理效率。在ASP.NET中進(jìn)行事務(wù)處理時(shí),需要使用SqlTransaction類,該類表示要在SQLServer數(shù)據(jù)庫(kù)中處理的Transact-SQL事務(wù),它有一個(gè)Connection屬性,用來(lái)獲取與該事務(wù)關(guān)聯(lián)的SqlConnection對(duì)象;另外,SqlTransaction類還有幾個(gè)重要的方法,如表6-15所示。表6-15 SqlTransaction類常用方法方法說(shuō)明Commit提交數(shù)據(jù)庫(kù)事務(wù)Rollback從掛起狀態(tài)回滾事務(wù),并且可以指定事務(wù)或保存點(diǎn)名稱Save在事務(wù)中創(chuàng)建保存點(diǎn)(它可用于回滾事務(wù)的一部分),并指定保存點(diǎn)名稱【例6-10】本實(shí)例在ASP.NET程序中創(chuàng)建SqlTransaction事務(wù),并使用事務(wù)同時(shí)向3個(gè)數(shù)據(jù)表中插入數(shù)據(jù),如果全部插入成功,則彈出提示信息;否則,如果插入過(guò)程中出現(xiàn)了異常,則使用Rollback方法執(zhí)行事務(wù)回滾。實(shí)例運(yùn)行效果如圖6-9所示。圖6-9使用事務(wù)向多個(gè)表中添加數(shù)據(jù)程序開(kāi)發(fā)步驟如下:(1)新建一個(gè)ASP.NET網(wǎng)站,默認(rèn)主頁(yè)為Default.aspx。(2)在Default.aspx頁(yè)面中添加9個(gè)TextBox控件和兩個(gè)Button控件,分別用于輸入要添加的數(shù)據(jù)信息、執(zhí)行添加操作和清空文本框。(3)在“提交”按鈕的Click事件中,將用戶輸入的信息通過(guò)使用事務(wù)添加到相應(yīng)的數(shù)據(jù)表中,代碼如下:protectedvoidbtnSub_Click(objectsender,EventArgse)SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");con.Open();SqlTransactionst=con.BeginTransaction(); //開(kāi)始事務(wù)SqlCommandcom=con.CreateCommand();com.Transaction=st;try//插入表a中的數(shù)據(jù)com.CommandText="insertintotb_avalues('"+txtAname.Text+"','"+txtAage.Text+"','"+txtAsex.Text+"')";com.ExecuteNonQuery();//插入表b中的數(shù)據(jù)com.CommandText="insertintotb_bvalues('"+txtBname.Text+"','"+txtBage.Text+"','"+txtBsex.Text+"')";com.ExecuteNonQuery();//插入表c中的數(shù)據(jù)com.CommandText="insertintotb_cvalues('"+txtCname.Text+"','"+txtCage.Text+"','"+txtCsex.Text+"')";com.ExecuteNonQuery();st.Commit(); //提交事務(wù)RegisterStartupScript(“true”,“<script>alert(‘添加成功!’)</script>”);catch(Exceptionex)st.Rollback(); //事務(wù)回滾RegisterStartupScript(“false”,“<script>alert(‘添加失??!’)</script>”);Finallycon.Close();con.Dispose();}6.4綜合實(shí)例——批量更新供求信息發(fā)布時(shí)間數(shù)據(jù)的批量更新是ASP.NET網(wǎng)站中經(jīng)常用到的技術(shù),它可以大大提高工作效率。本實(shí)例實(shí)現(xiàn)的批量更新在供求信息網(wǎng)中信息的發(fā)布時(shí)間,以體現(xiàn)信息的時(shí)效性并保證最新供求信息。實(shí)例運(yùn)行結(jié)果如圖6-10所示。圖6-10批量更新供求信息發(fā)布時(shí)間程序開(kāi)發(fā)步驟如下:(1)新建一個(gè)網(wǎng)站,將其命名為UpdateDates,默認(rèn)主頁(yè)名為Default.aspx。(2)在Default.aspx頁(yè)面中添加兩個(gè)CheckBox控件,分別用來(lái)實(shí)現(xiàn)單條數(shù)據(jù)的選擇、全選/反選操作;添加一個(gè)GridView控件,用來(lái)顯示供求信息;添加一個(gè)Button控件,用來(lái)執(zhí)行批量更新操作。GridView控件的設(shè)計(jì)代碼如下:<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"OnRowDataBound="GridView1_RowDataBound"OnSelectedIndexChanging="GridView1_SelectedIndexChanging"Font-Size="9pt"AllowPaging="True"EmptyDataText="沒(méi)有相關(guān)數(shù)據(jù)可以顯示!"OnPageIndexChanging="GridView1_PageIndexChanging"CellPadding="3"ForeColor="Black"GridLines="Vertical"BackColor="White"BorderColor="#999999"BorderStyle="Solid"BorderWidth="1px"><Columns><asp:TemplateField><ItemTemplate><asp:CheckBoxID="cbSingleOrMore"runat="server"/>
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球光學(xué)透明粘合帶行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025合同范本勞務(wù)派遣合同模板書人力資源和企業(yè)新
- 2025用戶服務(wù)合同
- 2025委托律師代理合同范本范文
- 土地轉(zhuǎn)讓居間合同
- 美容師勞動(dòng)合同書
- 消殺服務(wù)合同范文
- 2025公司用工合同范本
- 戰(zhàn)略合作協(xié)議書合同
- 小區(qū)監(jiān)控改造方案
- 第1課+古代亞非(教學(xué)設(shè)計(jì))【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 新教科版六年級(jí)下冊(cè)科學(xué)全冊(cè)教案
- 物業(yè)客服管家的培訓(xùn)課件
- 2024年房地產(chǎn)行業(yè)的樓市調(diào)控政策解讀培訓(xùn)
- 《統(tǒng)計(jì)學(xué)-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語(yǔ)言-時(shí)間序列分析和預(yù)測(cè)
- 裝飾定額子目(河南省)
- 【高速鐵路乘務(wù)工作存在的問(wèn)題及對(duì)策研究9800字】
- 北師大版英語(yǔ)課文同步字帖三年級(jí)下冊(cè)課文對(duì)話原文及翻譯衡水體英語(yǔ)字帖三年級(jí)起點(diǎn)
- GB/T 2550-2016氣體焊接設(shè)備焊接、切割和類似作業(yè)用橡膠軟管
- GB/T 21295-2014服裝理化性能的技術(shù)要求
評(píng)論
0/150
提交評(píng)論