版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本章要求:第6章ADO.NET數(shù)據(jù)庫操作技術ADO.NET技術簡介ADO.NET中的7個主要對象及其屬性、方法如何打開和關閉數(shù)據(jù)庫連接使用SQL語句執(zhí)行數(shù)據(jù)的增、刪、改、查操作使用存儲過程執(zhí)行數(shù)據(jù)的增、刪、改、查操作如何在ASP.NET程序中使用事務數(shù)據(jù)的批量更新操作使用二進制格式在數(shù)據(jù)庫中存取圖片主要內容1.ADO.NET概述2.ADO.NET對象模型3.數(shù)據(jù)庫開發(fā)基本操作4.綜合實例——批量更新供求信息發(fā)布時間第6章ADO.NET數(shù)據(jù)庫操作技術6.1ADO.NET概述ADO.NET是微軟新一代.NET數(shù)據(jù)庫的訪問架構,ADO是ActiveXDataObjects的縮寫。ADO.NET是數(shù)據(jù)庫應用程序和數(shù)據(jù)源之間溝通的橋梁,主要提供一個面向對象的數(shù)據(jù)訪問架構,用來開發(fā)數(shù)據(jù)庫應用程序。為了更好的理解ADO.NET的架構模型的各個組成部分,我們可以對ADO.NET中的相關對象進行圖示理解,如圖6-1所示的是ADO.NET中數(shù)據(jù)庫對象的關系圖。圖6-1ADO.NET中數(shù)據(jù)庫對象的關系圖6.2.1Connection對象6.2.2Command對象6.2.3DataReader對象6.2.4DataAdapter對象6.2.5DataSet對象6.2.6DataTable對象6.2.7DataView對象6.2ADO.NET對象模型Connection對象用于連接到數(shù)據(jù)庫和管理對數(shù)據(jù)庫的事務,該對象提供一些方法,允許開發(fā)人員與數(shù)據(jù)源建立連接或者斷開連接。微軟公司提供了4種數(shù)據(jù)提供程序的連接對象,分別如下:SQLServer.NET數(shù)據(jù)提供程序的SqlConnection連接對象,命名空間System.Data.SqlClient.SqlConnection。OLEDB.NET數(shù)據(jù)提供程序的OleDbConnection連接對象,命名空間System.Data.OleDb.OleDbConnection。ODBC.NET數(shù)據(jù)提供程序的OdbcConnection連接對象,命名空間System.Data.Odbc.OdbcConnection。Oracle.NET數(shù)據(jù)提供程序的OracleConnection連接對象,命名空間System.Data.OracleClient.OracleConnection。6.2.1Connection對象Connection對象常用屬性如表6-1所示。表6-1 Connection對象常用屬性Connection對象常用方法如表6-2所示。表6-2 Connection對象常用方法屬性說明ConnectionString獲取或設置用于打開數(shù)據(jù)庫的字符串ConnectionTimeout獲取在嘗試建立連接時終止嘗試并生成錯誤之前所等待的時間Database獲取當前數(shù)據(jù)庫或連接打開后要使用的數(shù)據(jù)庫的名稱DataSource獲取要連接的數(shù)據(jù)庫服務器名稱State指示數(shù)據(jù)庫的連接狀態(tài)方法說明BeginTransaction開始數(shù)據(jù)庫事務ChangeDatabase更改當前數(shù)據(jù)庫ChangePassword將連接字符串中指示的用戶的數(shù)據(jù)庫密碼更改為提供的新密碼ClearAllPools清空連接池Close關閉與數(shù)據(jù)庫的連接CreateCommand創(chuàng)建并返回一個與Connection關聯(lián)的Command對象Dispose釋放由Connection使用的所有資源Open使用ConnectionString屬性所指定的屬性設置打開數(shù)據(jù)庫連接
Command對象用來對數(shù)據(jù)源執(zhí)行查詢、添加、刪除和修改等各種操作,操作實現(xiàn)的方式可以是使用SQL語句,也可以是使用存儲過程。根據(jù)所用的.NETFramework數(shù)據(jù)提供程序的不同,Command對象也可以分成4種,分別是SqlCommand、OleDbCommand、OdbcCommand和OracleCommand,在實際的編程過程中應根據(jù)訪問的數(shù)據(jù)源不同,選擇相應的Command對象。Command對象常用屬性如表6-3所示。表6-3 Command對象常用屬性6.2.2Command對象屬性說明CommandType獲取或設置Command對象要執(zhí)行命令的類型CommandText獲取或設置要對數(shù)據(jù)源執(zhí)行的SQL語句或存儲過程名或表名CommandTimeOut獲取或設置在終止對執(zhí)行命令的嘗試并生成錯誤之前的等待時間Connection獲取或設置此Command對象使用的Connection對象的名稱Parameters獲取Command對象需要使用的參數(shù)集合Transaction獲取或設置將在其中執(zhí)行Command的SqlTransactionCommand對象常用方法如表6-4所示。表6-4 Command對象常用方法方法說明ExecuteNonQuery用于執(zhí)行非SELECT命令,比如INSERT、DELETE或者UPDATE命令,返回三個命令所影響的數(shù)據(jù)的行數(shù)。也可以用ExecuteNonQuery()來執(zhí)行一些數(shù)據(jù)定義命令,比如新建、更新、刪除數(shù)據(jù)庫對象(如表、索引等)ExecuteScalar用于執(zhí)行SELECT查詢命令,返回數(shù)據(jù)中第一行第一列的值。這個方法通常用來執(zhí)行那些用到COUNT()或SUM()函數(shù)的SELECT命令。ExecuteReader執(zhí)行SELECT命令,并返回一個DataReader對象。這個DataReader是向前只讀的數(shù)據(jù)集6.2.3DataReader對象DataReader對象是一個簡單的數(shù)據(jù)集,如其名一樣,用于從數(shù)據(jù)源中讀取只讀的數(shù)據(jù)集,常用于檢索大量數(shù)據(jù)。根據(jù).NETFramework數(shù)據(jù)提供程序不同,DataReader可以分成SqlDataReader、OleDbDataReader等幾類。DataReader每次只能在內存中保留一行,所以開銷非常小。使用DataReader對象讀取數(shù)據(jù)時,必須一直保持與數(shù)據(jù)庫的連接,所以也被稱為連線模式,其架構如圖6-2所示。
圖6-2SqlDataReader讀取數(shù)據(jù)時,必須一直保持與數(shù)據(jù)庫的連接說明:DataReader是一個輕量級的數(shù)據(jù)對象,如果只需要將數(shù)據(jù)讀出并顯示,那它是最合適的工具,它的讀取速度比稍后要講解的DataSet對象要快,占用的資源也比DataSet少。但是,一定要銘記,DataReader在讀取數(shù)據(jù)時,要求數(shù)據(jù)庫保持在連接狀態(tài),讀取完數(shù)據(jù)之后才能斷開連接。DataReader對象常用屬性如表6-5所示。表6-5 DataReader對象常用屬性DataReader對象常用方法如表6-6所示。表6-6 DataReader對象常用方法屬性說明Connection獲取與DataReader關聯(lián)的Connection對象HasRows判斷數(shù)據(jù)庫中是否有數(shù)據(jù)FieldCount獲取當前行的列數(shù)IsClosed檢索一個布爾值,該值指示是否已關閉指定的DataReader實例Item在給定列序號或列名稱的情況下,獲取指定列的以本機格式表示的值RecordsAffected獲取執(zhí)行SQL語句所更改、添加或刪除的行數(shù)方法說明IsDBNull獲取一個值,用于指示列中是否包含不存在的或缺少的值Read使DataReader對象前進到下一條記錄NextResult當讀取批處理Transact-SQL語句的結果時,使數(shù)據(jù)讀取器前進到下一個結果Close關閉DataReader對象Get用來讀取數(shù)據(jù)集的當前行的某一列的數(shù)據(jù)6.2.4DataAdapter對象DataAdapter(即數(shù)據(jù)適配器)對象是一種用來充當DataSet對象與實際數(shù)據(jù)源之間橋梁的對象,可以說只要有DataSet的地方就有它,它也是專門為DataSet服務的。DataAdapter對象的工作步驟一般有兩種:一種是通過Command對象執(zhí)行SQL語句從數(shù)據(jù)源中檢索數(shù)據(jù),將獲取的結果集填充到DataSet對象的表中;另一種是把用戶對DataSet對象做出的更改寫入到數(shù)據(jù)源中。說明:在.NETFramework中主要使用兩種DataAdapter對象,即OleDbDataAdapter和SqlDataAdapter。OleDbDataAdapter對象適用于OLEDB數(shù)據(jù)源,SqlDataAdapter對象適用于SQLServer7.0或更高版本。DataAdapter對象常用屬性如表6-7所示。表6-7 DataAdapter對象常用屬性屬性說明SelectCommand獲取或設置用于在數(shù)據(jù)源中選擇記錄的命令InsertCommand獲取或設置用于將新記錄插入到數(shù)據(jù)源中的命令UpdateCommand獲取或設置用于更新數(shù)據(jù)源中記錄的命令DeleteCommand獲取或設置用于從數(shù)據(jù)集中刪除記錄的命令DataAdapter對象常用方法如表6-8所示。表6-8 DataAdapter對象常用方法方法說明AddToBatch向當前批處理添加Command對象ExecuteBatch執(zhí)行當前批處理Fill從數(shù)據(jù)源中提取數(shù)據(jù)以填充數(shù)據(jù)集FillSchema從數(shù)據(jù)源中提取數(shù)據(jù)架構以填充數(shù)據(jù)集Update更新數(shù)據(jù)源6.2.5DataSet對象DataSet是ADO.NET的核心成員之一,它是支持ADO.NET斷開式、分布式數(shù)據(jù)方案的核心對象,也是實現(xiàn)基于非連接的數(shù)據(jù)查詢的核心組件。DataSet對象是創(chuàng)建在內存中的集合對象,它可以包含任意數(shù)量的數(shù)據(jù)表,以及所有表的約束、索引和關系,相當于在內存中的一個小型關系數(shù)據(jù)庫。一個DataSet對象包括一組DataTable對象和DataRelation對象,其中,每個DataTable對象由DataColumn、DataRow和DataRelation對象組成。DataSer數(shù)據(jù)模型如圖6-3所示。圖6-3DataSet數(shù)據(jù)模型DataSet對象常用屬性如表6-9所示。表6-9DataSet對象常用屬性DataSet對象常用方法如表6-10所示。表6-10 DataSet對象常用方法屬性說明Relations獲取用于將表鏈接起來并允許從父表瀏覽到子表的關系的集合Tables獲取包含在DataSet中的表的集合方法說明AcceptChanges提交自加載此DataSet或上次調用AcceptChanges以來對其進行的所有更改Clear通過移除所有表中的所有行來清除任何數(shù)據(jù)的DataSetClone復制DataSet的結構,包括所有DataTable架構、關系和約束。不要復制任何數(shù)據(jù)Copy復制該DataSet的結構和數(shù)據(jù)GetXml返回存儲在DataSet中的數(shù)據(jù)的XML表示形式Merge將指定的DataSet及其架構合并到當前DataSet中ReadXml使用指定的文件或流將XML架構和數(shù)據(jù)讀入DataSetWriteXml將DataSet的當前數(shù)據(jù)寫入指定的文件或者流中6.2.6DataTable對象在ADO.NET中,DataTable對象用于表示DataSet中的表。DataTable表示一個內存內關系數(shù)據(jù)的表;數(shù)據(jù)對于所處的基于.NET的應用程序來說是本地數(shù)據(jù),但可從數(shù)據(jù)源(例如,使用DataAdapter的MicrosoftSQLServer)中導入。DataTable類是.NETFramework類庫中System.Data命名空間的成員。用戶可以獨立創(chuàng)建和使用DataTable,也可以作為DataSet的成員創(chuàng)建和使用,而且DataTable對象也可以與其他.NETFramework對象(包括DataView)一起使用,另外,用戶可以通過DataSet對象的Tables屬性來訪問DataSet中表的集合。DataTable對象常用屬性如表6-11所示。表6-11 DataTable對象常用屬性屬性說明ChildRelations獲取DataTable的子關系的集合Columns獲取屬于該表的列的集合Constraints獲取由該表維護的約束的集合DefaultView獲取可能包括篩選視圖或游標位置的表的自定義視圖Rows獲取屬于該表的行的集合DataTable對象常用方法如表6-12所示。表6-12 DataTable對象常用方法方法說明AcceptChanges提交自上次調用AcceptChanges以來對該表進行的所有更改BeginLoadData在加載數(shù)據(jù)時關閉通知、索引維護和約束Clear清除所有數(shù)據(jù)的DataTableImportRow將DataRow復制到DataTable中,保留任何屬性設置以及初始值和當前值Load使用指定數(shù)據(jù)源的值填充DataTable。如果DataTable已經包含行,則從數(shù)據(jù)源傳入的數(shù)據(jù)將與現(xiàn)有的行合并Merge將指定的DataTable與當前的DataTable合并NewRow創(chuàng)建與該表具有相同架構的新DataRowNewRowFromBuilder從現(xiàn)有的行創(chuàng)建新行ReadXml使用指定的文件或流將XML架構和數(shù)據(jù)讀入DataTableSelect獲取所有DataRow對象的數(shù)組WriteXml將DataTable的當前數(shù)據(jù)寫入指定的文件或者流中6.2.7DataView對象在ADO.NET中,DataView對象表示用于排序、篩選、搜索、編輯和導航的DataTable的可綁定數(shù)據(jù)的自定義視圖;另外,可以自定義DataView來表示DataTable中數(shù)據(jù)的子集,該功能讓用戶擁有綁定到同一DataTable、但顯示不同數(shù)據(jù)版本的兩個控件。例如,一個控件可能綁定到顯示表中所有行的DataView,而另一個控件可能配置為只顯示已從DataTable刪除的行。DataTable也具有DefaultView屬性,它返回表的默認DataView。DataView對象常用屬性如表6-13所示。表6-13 DataView對象常用屬性屬性說明AllowDelete設置或獲取一個值,該值指示是否允許刪除AllowEdit獲取或設置一個值,該值指示是否允許編輯AllowNew獲取或設置一個值,該值指示是否可以使用AddNew方法添加新行ApplyDefaultSort獲取或設置一個值,該值指示是否使用默認排序Count在應用RowFilter和RowStateFilter之后,獲取DataView中記錄的數(shù)量IsOpen獲取一個值,該值指示數(shù)據(jù)源當前是否已打開并在DataTable上映射數(shù)據(jù)視圖Item從指定的表獲取一行數(shù)據(jù)RowFilter獲取或設置用于篩選在DataView中查看哪些行的表達式RowStateFilter獲取或設置用于DataView中的行狀態(tài)篩選器Sort獲取或設置DataView的一個或多個排序列以及排序順序Table獲取或設置源DataTableDataView對象常用方法如表6-14所示。表6-14 DataView對象常用方法方法說明AddNew將新行添加到DataView中Close關閉DataViewDelete刪除指定索引位置的行Find按指定的排序關鍵字值在DataView中查找行FindRows返回DataRowView對象的數(shù)組,這些對象的列與指定的排序關鍵字值匹配Open打開一個DataViewToTable根據(jù)現(xiàn)有DataView中的行,創(chuàng)建并返回一個新的DataTable6.3數(shù)據(jù)庫開發(fā)基本操作6.3.1打開和關閉數(shù)據(jù)庫連接6.3.2查詢數(shù)據(jù)庫中數(shù)據(jù)6.3.3向數(shù)據(jù)庫中添加數(shù)據(jù)6.3.4修改數(shù)據(jù)庫中數(shù)據(jù)6.3.5刪除數(shù)據(jù)庫中數(shù)據(jù)6.3.6使用事務6.3.1打開和關閉數(shù)據(jù)庫連接打開和關閉數(shù)據(jù)庫連接分別使用SqlConnection對象的Open方法和Close方法,下面通過具體的實例進行講解?!纠?-1】本實例分別使用SqlConnection對象的Open方法和Close方法打開和關閉SQLServer數(shù)據(jù)庫連接。實例運行效果如圖6-4所示。圖6-4打開和關閉數(shù)據(jù)庫連接程序開發(fā)步驟如下:(1)新建一個ASP.NET網站,默認主頁為Default.aspx。(2)Default.aspx頁面加載時,首先創(chuàng)建SqlConnection對象,并使用Open方法打開數(shù)據(jù)庫連接;然后使用SqlConnection對象的State判斷數(shù)據(jù)庫連接的狀態(tài),如果是打開狀態(tài),則使用Close方法關閉數(shù)據(jù)庫連接。代碼如下:protectedvoidPage_Load(objectsender,EventArgse){//創(chuàng)建連接數(shù)據(jù)庫的字符串
stringSqlStr="Server=MRWXK\\MRWXK;UserId=sa;Pwd=;DataBase=db_ASPNET";SqlConnectioncon=newSqlConnection(SqlStr); //創(chuàng)建SqlConnection對象
con.Open(); //打開數(shù)據(jù)庫的連接
if(con.State==System.Data.ConnectionState.Open){Response.Write("SQLServer數(shù)據(jù)庫連接開啟!<p/>");con.Close(); //關閉數(shù)據(jù)庫的連接
}if(con.State==System.Data.ConnectionState.Closed){Response.Write("SQLServer數(shù)據(jù)庫連接關閉!<p/>");}}
1.使用SQL語句查詢【例6-2】本實例主要演示如何使用SQL語句從數(shù)據(jù)庫中查詢數(shù)據(jù)的功能,實例運行效果如圖6-5所示。圖6-5使用SQL語句查詢數(shù)據(jù)6.3.2查詢數(shù)據(jù)庫中數(shù)據(jù)程序開發(fā)步驟如下:(1)新建一個ASP.NET網站,在Default.aspx頁面中添加一個GridView控件,用來顯示從數(shù)據(jù)庫中查詢到的數(shù)據(jù)。(2)頁面加載時,通過SQL語句從數(shù)據(jù)庫中查詢數(shù)據(jù),并綁定到GridView控件上,代碼如下:protectedvoidPage_Load(objectsender,EventArgse){stringstrCon="DataSource=MRWXK\\MRWXK;Database=db_ASPNET;uid=sa;pwd=;";SqlConnectionsqlcon=newSqlConnection(strCon); //創(chuàng)建數(shù)據(jù)庫連接對象SqlDataAdaptersqlda=newSqlDataAdapter(); //創(chuàng)建SqlDataAdapter對象//給SqlDataAdapter的SelectCommand賦值sqlda.SelectCommand=newSqlCommand("select*fromtb_mrbccd",sqlcon);DataSetds=newDataSet(); //創(chuàng)建DataSet對象sqlda.Fill(ds); //填充數(shù)據(jù)集GridView1.DataSource=ds; //設置GridView數(shù)據(jù)源GridView1.DataBind(); //數(shù)據(jù)綁定}2.使用存儲過程查詢【例6-3】使用存儲過程實現(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ù)庫連接對象SqlDataAdaptersqlda=newSqlDataAdapter(); //創(chuàng)建SqlDataAdapter對象//給SqlDataAdapter的SelectCommand賦值sqlda.SelectCommand=newSqlCommand("proc_Select",sqlcon);sqlda.SelectCommand.CommandType=CommandType.StoredProcedure;//指定執(zhí)行存儲過程DataSetds=newDataSet(); //創(chuàng)建DataSet對象sqlda.Fill(ds); //填充數(shù)據(jù)集GridView1.DataSource=ds; //設置GridView數(shù)據(jù)源GridView1.DataBind(); //數(shù)據(jù)綁定調用的存儲過程代碼如下:CREATEPROCEDUREproc_SelectASBEGIN SELECT*fromtb_mrbccdEND說明:存儲過程(StoredProcedure)是預編譯SQL語句的集合,這些語句存儲在一個名稱下并作為一個單元來處理。存儲過程代替了傳統(tǒng)的逐條執(zhí)行SQL語句的方式,一個存儲過程中可以包含查詢、插入、刪除、更新等操作的一系列SQL語句,當這個存儲過程被調用執(zhí)行時,這些操作也會同時執(zhí)行。6.3.3向數(shù)據(jù)庫中添加數(shù)據(jù)1.使用SQL語句添加【例6-4】本實例主要講解如何使用SQL語句向數(shù)據(jù)庫添加記錄。執(zhí)行程序,實例運行結果如圖6-6所示;在編程詞典版本的輸入文本框中,輸入商品名稱“ASP.NET編程詞典”,在價格欄中填寫價格后,然后單擊“執(zhí)行添加操作”按鈕,將編程詞典商品名稱及價格添加到數(shù)據(jù)庫中。圖6-6使用SQL語句添加數(shù)據(jù)程序開發(fā)步驟如下:(1)新建一個網站,默認主頁為Default.aspx,在Default.aspx頁面上添加兩個TextBox控件和一個Button控件,分別用來輸入版本、價格和執(zhí)行添加操作。(2)在“執(zhí)行添加操作”按鈕的Click事件下,使用Command對象將文本框中的數(shù)據(jù)添加到數(shù)據(jù)庫中,代碼如下:protectedvoidbtInsert_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection("Server=MRWXK\\MRWXK;UserId=sa;Pwd=;DataBase=db_ASPNET"); //創(chuàng)建數(shù)據(jù)庫連接對象
stringstrsql="insertintotb_mrbccd(brccdName,brccdPrice)values('"+txtBrccdName.Text+"','"+txtBrccdPrice.Text+"')";SqlCommandcomm=newSqlCommand(strsql,conn); //創(chuàng)建SqlCommand對象
if(conn.State.Equals(ConnectionState.Closed)) //打開數(shù)據(jù)庫連接
{conn.Open();}//判斷ExecuteNonQuery方法返回的參數(shù)是否大于0,大于0表示添加成功
if(Convert.ToInt32(comm.ExecuteNonQuery())>0){Response.Write("信息提示:添加成功!");}else{Response.Write("信息提示:添加失敗!");}if(conn.State.Equals(ConnectionState.Open)) //關閉數(shù)據(jù)庫連接
conn.Close();}2.使用存儲過程添加【例6-5】使用存儲過程實現(xiàn)例6-4的功能,代碼如下:。protectedvoidbtnInsert_Click(objectsender,EventArgse){//創(chuàng)建數(shù)據(jù)庫連接對象
SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//創(chuàng)建命令對象,并指定存儲過程名稱
SqlCommandcmd=newSqlCommand("proc_Insert",con);cmd.CommandType=CommandType.StoredProcedure; //指定命令類型為存儲過程
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(); //關閉數(shù)據(jù)連接}調用的存儲過程代碼如下:CREATEPROCEDUREproc_Insert(@BccdName[Varchar](50),@BccdPricedecimal)/*指明該存儲過程中將要執(zhí)行的動作*/ASINSERTINTOtb_mrbccd(brccdName,brccdPrice)VALUES(@BccdName,@BccdPrice)GO6.3.4修改數(shù)據(jù)庫中數(shù)據(jù)1.使用SQL語句修改【例6-6】本實例主要演示如何使用SQL語句修改數(shù)據(jù)庫中數(shù)據(jù)的功能。運行程序,在兩個TextBox控件中分別輸入要修改的數(shù)據(jù),單擊“執(zhí)行修改操作”按鈕,即可修改指定的數(shù)據(jù),運行效果如圖6-7所示。
圖6-7使用SQL語句修改數(shù)據(jù)程序開發(fā)步驟如下:(1)新建一個網站,默認主頁為Default.aspx,在Default.aspx頁面上添加兩個TextBox控件和一個Button控件,分別用來輸入要修改的版本和價格信息,并執(zhí)行數(shù)據(jù)修改操作。(2)當輸入要修的商品名稱后,單擊“執(zhí)行修改操作”按鈕,在該按鈕的Click事件下,使用SQL語句對數(shù)據(jù)庫中的指定數(shù)據(jù)進行修改,代碼如下:protectedvoidButton1_Click(objectsender,EventArgse){//建立數(shù)據(jù)庫鏈接
SqlConnectionmyConn=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//定義查詢SQL語句
stringsqlStr="updatetb_mrbccdsetbrccdName='"+txtBccdName.Text+"',brccdPrice='"+txtBccdPrice.Text+"'whereid=1";SqlCommandmyCmd=newSqlCommand(sqlStr,myConn); //初始化查詢命令
if(myConn.State==ConnectionState.Closed) //打開數(shù)據(jù)庫鏈接
{myConn.Open();}intrecords=Convert.ToInt32(myCmd.ExecuteNonQuery());if(records>0)Response.Write("修改成功!更新了"+records.ToString()+"條數(shù)據(jù)!");elseResponse.Write("信息提示:修改失??!");myCmd.Dispose();myConn.Close(); //關閉數(shù)據(jù)庫連接}2.使用存儲過程修改【例6-7】使用存儲過程實現(xiàn)例6-6的功能,代碼如下:。protectedvoidButton1_Click(objectsender,EventArgse){//建立數(shù)據(jù)庫鏈接
SqlConnectionmyConn=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//指定存儲過程名稱
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;//打開數(shù)據(jù)庫鏈接
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();}調用的存儲過程代碼如下:CREATEPROCEDUREproc_Update(@BccdName[Varchar](50),@BccdPricedecimal)ASupdatetb_mrbccdsetbrccdName=@BccdName,brccdPrice=@BccdPricewhereid=1GO6.3.5刪除數(shù)據(jù)庫中數(shù)據(jù)1.使用SQL語句刪除【例6-8】本實例主要演示如何使用SQL語句刪除數(shù)據(jù)庫中數(shù)據(jù)的功能。運行程序,在TextBox控件中輸入要刪除的信息的編號,單擊“執(zhí)行刪除操作”按鈕,即可刪除指定的數(shù)據(jù),運行效果如圖6-8所示。
圖6-8使用SQL語句刪除數(shù)據(jù)程序開發(fā)步驟如下:(1)新建一個網站,默認主頁為Default.aspx,在Default.aspx頁面上添加一個TextBox控件、一個Button按鈕和一個Lable控件,分別用來輸入要刪除的編程詞典版本編號、執(zhí)行刪除操作和顯示提示信息。(2)當在文本框輸入ID號碼后,單擊“執(zhí)行刪除操作”按鈕,使用SQL語句實現(xiàn)刪除指定信息的功能,代碼如下:protectedvoidbtnDelete_Click(objectsender,EventArgse){intmrbccdId=Convert.ToInt32(this.txtbccdID.Text.Trim());if(mrbccdId>0) //簡單的數(shù)據(jù)驗證
{//創(chuàng)建數(shù)據(jù)庫連接對象
SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");SqlCommandcmd=newSqlCommand("deletefromtb_mrbccdwhereid='"+Convert.ToInt32(txtbccdID.Text)+"'",con); //創(chuàng)建SqlCommad命令對象
con.Open(); //打開數(shù)據(jù)庫連接
cmd.ExecuteNonQuery(); //執(zhí)行刪除操作
lblError.Text="刪除成功!";con.Close();}else{//當用戶輸入的版本號不為正整數(shù)時給予提示
lblError.Text="版本編號必須是正整數(shù)!";}}2.使用存儲過程修改【例6-9】使用存儲過程實現(xiàn)例6-8的功能,代碼如下:。protectedvoidbtnDelete_Click(objectsender,EventArgse){intmrbccdId=Convert.ToInt32(this.txtbccdID.Text.Trim());if(mrbccdId>0) //簡單的數(shù)據(jù)驗證//創(chuàng)建數(shù)據(jù)庫連接對象
SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");//指定存儲過程名稱
SqlCommandcmd=newSqlCommand("proc_Delete",con);cmd.CommandType=CommandType.StoredProcedure;cmd.Parameters.Add("@id",SqlDbType.Int).Value=txtbccdID.Text;con.Open(); //打開數(shù)據(jù)庫連接
cmd.ExecuteNonQuery(); //執(zhí)行刪除操作
lblError.Text="刪除成功!";con.Close();}else//當用戶輸入的版本號不為正整數(shù)時給予提示
lblError.Text="版本編號必須是正整數(shù)!";調用的存儲過程代碼如下:CREATEPROCEDUREproc_Delete(@idint)ASdeletefromtb_mrbccdwhereid=@idGO6.3.6使用事務事務是由一系列語句構成的邏輯工作單元,事務和存儲過程等批處理有一定程度上的相似之處,通常都是為了完成一定業(yè)務邏輯而將一條或者多條語句“封裝”起來,使它們與其他語句之間出現(xiàn)一個邏輯上的邊界,并形成相對獨立的一個工作單元。當使用事務對多個數(shù)據(jù)表操作時,如果在處理的過程中出現(xiàn)了某種錯誤,例如系統(tǒng)死機或突然斷電等情況,則返回結果是數(shù)據(jù)全部沒有被保存,因為事務處理的結果只有兩種:一種是在事務處理的過程中,如果發(fā)生了某種錯誤則整個事務全部回滾,使所有對數(shù)據(jù)的修改全部撤銷,事務對數(shù)據(jù)庫的操作是單步執(zhí)行的,當遇到錯誤時可以隨時地回滾;另一種是如果沒有發(fā)生任何錯誤且每一步的執(zhí)行都成功,則整個事務全部被提交。從這里可以看出,有效的使用事務不但可以提高數(shù)據(jù)的安全性,而且還可以增強數(shù)據(jù)的處理效率。在ASP.NET中進行事務處理時,需要使用SqlTransaction類,該類表示要在SQLServer數(shù)據(jù)庫中處理的Transact-SQL事務,它有一個Connection屬性,用來獲取與該事務關聯(lián)的SqlConnection對象;另外,SqlTransaction類還有幾個重要的方法,如表6-15所示。表6-15 SqlTransaction類常用方法方法說明Commit提交數(shù)據(jù)庫事務Rollback從掛起狀態(tài)回滾事務,并且可以指定事務或保存點名稱Save在事務中創(chuàng)建保存點(它可用于回滾事務的一部分),并指定保存點名稱【例6-10】本實例在ASP.NET程序中創(chuàng)建SqlTransaction事務,并使用事務同時向3個數(shù)據(jù)表中插入數(shù)據(jù),如果全部插入成功,則彈出提示信息;否則,如果插入過程中出現(xiàn)了異常,則使用Rollback方法執(zhí)行事務回滾。實例運行效果如圖6-9所示。圖6-9使用事務向多個表中添加數(shù)據(jù)程序開發(fā)步驟如下:(1)新建一個ASP.NET網站,默認主頁為Default.aspx。(2)在Default.aspx頁面中添加9個TextBox控件和兩個Button控件,分別用于輸入要添加的數(shù)據(jù)信息、執(zhí)行添加操作和清空文本框。(3)在“提交”按鈕的Click事件中,將用戶輸入的信息通過使用事務添加到相應的數(shù)據(jù)表中,代碼如下:protectedvoidbtnSub_Click(objectsender,EventArgse)SqlConnectioncon=newSqlConnection("server=MRWXK\\MRWXK;database=db_ASPNET;uid=sa;pwd=;");con.Open();SqlTransactionst=con.BeginTransaction(); //開始事務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(); //提交事務RegisterStartupScript(“true”,“<script>alert(‘添加成功!’)</script>”);catch(Exceptionex)st.Rollback(); //事務回滾RegisterStartupScript(“false”,“<script>alert(‘添加失敗!’)</script>”);Finallycon.Close();con.Dispose();}6.4綜合實例——批量更新供求信息發(fā)布時間數(shù)據(jù)的批量更新是ASP.NET網站中經常用到的技術,它可以大大提高工作效率。本實例實現(xiàn)的批量更新在供求信息網中信息的發(fā)布時間,以體現(xiàn)信息的時效性并保證最新供求信息。實例運行結果如圖6-10所示。圖6-10批量更新供求信息發(fā)布時間程序開發(fā)步驟如下:(1)新建一個網站,將其命名為UpdateDates,默認主頁名為Default.aspx。(2)在Default.aspx頁面中添加兩個CheckBox控件,分別用來實現(xiàn)單條數(shù)據(jù)的選擇、全選/反選操作;添加一個GridView控件,用來顯示供求信息;添加一個Button控件,用來執(zhí)行批量更新操作。GridView控件的設計代碼如下:<asp:GridViewID="GridView1"runat="server"AutoGenerateColumns="False"OnRowDataBound="GridView1_RowDataBound"OnSelectedIndexChanging="GridView1_SelectedIndexChanging"Font-Size="9pt"AllowPaging="True"EmptyDataText="沒有相關數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題04-水圈(核心精講)高一地理新教材知識講學(解析版)
- 4-4-走可持續(xù)發(fā)展之路(同步練習)-2021-2022學年高一地理(原卷版)
- 2025版金融科技項目股權合作轉讓及風險控制協(xié)議3篇
- 家庭教育中的禮儀教育塑造孩子文明形象
- 新高考古詩文背誦篇目(情境訓練)3必修上+下冊詩詞篇(學生版)
- 二零二五年度海上貨物運輸及船舶資產評估合同2篇
- 2024年簡化版財產放棄離婚合同書版B版
- 家庭教育中的心理輔導與情感教育結合
- 酒店管理的經驗分享
- 小學生體育運動與心理健康的關聯(lián)研究
- 消防安全制度完整版
- 建設工程施工合同農民工工資補充協(xié)議
- 企業(yè)所得稅匯算清繳申報表電子表格版(帶公式-自動計算)
- 建設單位如何做好項目管理
- 三年級上遞等式計算400題
- 九年級物理《第5節(jié) 磁生電》課件(三套)
- JJF(機械) 1019-2018 有載分接開關測試儀校準規(guī)范
- 2024年度-呼吸道傳染病防治
- 我國個人信息保護立法的完善分析
- 2024醫(yī)療建筑韌性設計導則
- 給警察培訓急救知識課件
評論
0/150
提交評論