第8章 .NET數(shù)據(jù)庫編程_第1頁
第8章 .NET數(shù)據(jù)庫編程_第2頁
第8章 .NET數(shù)據(jù)庫編程_第3頁
第8章 .NET數(shù)據(jù)庫編程_第4頁
第8章 .NET數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

重點內(nèi)容:

ADO.NET

連接數(shù)據(jù)庫讀取數(shù)據(jù)

DataReader

填充數(shù)據(jù)集第8章ADO.NET數(shù)據(jù)庫編程一、ADO.NET在ASP.NET應用程序中訪問數(shù)據(jù)庫要通過ADO.NET來實現(xiàn)。ADO.NET又被稱為ActiveX數(shù)據(jù)對象(ActiveXDataObject),是從Web的角度對ADO進行檢討和改進的。ADO.NET是為了因應廣泛的數(shù)據(jù)控制而設(shè)計,所以使用起來比以前的ADO更靈活有彈性,也提供了更多的功能。ADO.NET對象模型中有五個主要的組件,分別是Connection、Command、DataSetCommand、DataSet以及DataReader。在ADO.NET對象模型中,DataSet(數(shù)據(jù)集)是最重要的對象。一般來說,一個DataSet對象就是一個記錄集的集合,可以通過命令用數(shù)據(jù)集合填充DataSet對象。ADO.NET提供了記錄集的所有數(shù)據(jù)庫功能,包括排序,分頁,過濾視圖,關(guān)系,索引,和主鍵等??梢杂肵ML形式保持或傳輸任何DataSet對象,而且無需付出任何額外的代價,因為DataSet對象本身就是按照XML格式構(gòu)造。Connection、Command、DataSetCommand以及DataReader是數(shù)據(jù)操作組件(ManagedProviders),負責建立聯(lián)機和數(shù)據(jù)操作。數(shù)據(jù)操作組件的主要功能是作為DataSet和數(shù)據(jù)源之間的橋梁,其主要功能是負責將數(shù)據(jù)源中的數(shù)據(jù)取出后填充到DataSet數(shù)據(jù)集中,或者將數(shù)據(jù)存回數(shù)據(jù)源。為了更好地支持斷開模型,ADO.NET組件將數(shù)據(jù)訪問與數(shù)據(jù)處理分離。它是通過兩個主要的組件:.NET數(shù)據(jù)提供程序(dataprovider)和Dataset來完成這一操作的。

1、組件結(jié)構(gòu)一、ADO.NET一、ADO.NET1、組件結(jié)構(gòu)ADO.NET體系結(jié)構(gòu)的一個核心元素是.NET數(shù)據(jù)提供程序,它是專門為數(shù)據(jù)處理以及快速地只進、只讀訪問數(shù)據(jù)而設(shè)計的組件。它是包括Connection、Command、DataReader和DataAdapter對象的組件。對象名稱描述Connection提供與數(shù)據(jù)源的連接Command用于返回數(shù)據(jù)、修改數(shù)據(jù)、運行存儲過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令。DataReader從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流DataAdapter提供連接DataSet對象和數(shù)據(jù)源的橋梁,使用Command對象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet中,并使對DataSet中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致。二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(1)打開MicrosoftSQLServerManagementStudio,彈出“連接到服務器”對話框,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(2)讀者選擇合適的服務器名稱和身份驗證方式后,在“連接到服務器”對話框單擊“連接”按鈕,連接到SQLServer服務器。連接成功后,進入程序的主界面,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(3)在“對象資源管理器”中右鍵單擊“數(shù)據(jù)庫”,從彈出的上下文菜單中選擇“新建數(shù)據(jù)庫”命令,彈出如圖所示的對話框。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(4)在“數(shù)據(jù)庫名稱”中輸入讀者想要創(chuàng)建的數(shù)據(jù)庫,這里輸入的名稱為SuperMarket,單擊“確定”按鈕創(chuàng)建SuperMarket數(shù)據(jù)庫。此時讀者會發(fā)現(xiàn)在“對象資源管理器”的“數(shù)據(jù)庫”節(jié)點中增加了一個名為SuperMarket的數(shù)據(jù)庫,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(5)展開SuperMarket節(jié)點,右鍵單擊“表”節(jié)點,開始進行表編輯操作,如圖所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(6)在右側(cè)的屬性窗體中把表的名稱改為Product,然后在編輯表的窗體中加入4列,最終結(jié)果如圖所示。

(7)右鍵單擊“編號”列,在彈出的上下文菜單在那個選擇“設(shè)置主鍵”命令,“編號”成為該表的主鍵。此時該表如圖8-8所示。

二、連接數(shù)據(jù)庫1、建立SQLServer數(shù)據(jù)庫(8)在“對象資源管理器”中右鍵單擊SuperMarket數(shù)據(jù)庫的product表,從彈出的上下文菜單中選擇“打開表”命令,向表中輸入記錄。該表中的記錄如圖所示。

二、連接數(shù)據(jù)庫2、連接SQLServer數(shù)據(jù)庫SQLServer.NETFramework數(shù)據(jù)提供程序使用SqlConnection對象提供與MicrosoftSQLServer的7.0版或它的更高版本的連接。SqlConnection的構(gòu)造函數(shù)定義如下所示。publicSqlConnection(stringconnectionString);其中,參數(shù)connectionString指定了用于打開SQLServer數(shù)據(jù)庫的連接。程序清單8.1所示的代碼示例演示了使用SqlConnection對象如何創(chuàng)建和打開數(shù)據(jù)庫連接。使用SqlConnection對象建和打開數(shù)據(jù)庫連接:stringConnStr="server=localhost;IntegratedSecurity=True; database=SuperMarket;";SqlConnection

sqlConn=newSqlConnection(ConnStr);sqlConn.Open();二、連接數(shù)據(jù)庫2、連接SQLServer數(shù)據(jù)庫通過VisualStudio的可視化的界面進行設(shè)置連接字符串首先要在Web頁面中添加一個SqlDataSource對象,然后在屬性編輯器中選擇ConnectionString屬性,再新建一個連接,在彈出的“選擇數(shù)據(jù)源”對話框中選擇“MicrosoftSQLServer”,如圖所示。

二、連接數(shù)據(jù)庫3、連接Access數(shù)據(jù)庫用于連接Access數(shù)據(jù)庫是AccessDataSource控件,該控件繼承自SqlDataSource控件,但是該類不支持連接到受用戶名或密碼保護的Access數(shù)據(jù)庫。因此這里還是通過SqlDataSource控件來實現(xiàn)可視化連接數(shù)據(jù)庫。首先,創(chuàng)建一個受密碼保護的Access數(shù)據(jù)庫文件Northwind.mdb,該數(shù)據(jù)庫包含一個名為“運貨商”的表,該表的內(nèi)容如圖所示。

二、連接數(shù)據(jù)庫3、連接Access數(shù)據(jù)庫然后創(chuàng)建一個名為OleDbTest.aspx的網(wǎng)頁,在Web頁面上添加SqlDataSource控件后,在屬性編輯器中選擇ConnectionString屬性,再新建一個連接,在彈出的“選擇數(shù)據(jù)源”對話框中選擇“MicrosoftAccess數(shù)據(jù)庫文件”,然后單擊“繼續(xù)”按鈕,彈出“添加連接”對話框,如圖所示。

三、讀取數(shù)據(jù)1、使用SqlCommand類SqlCommand類可以用來對SQLServer數(shù)據(jù)庫執(zhí)行的一個Transact-SQL語句或存儲過程。SqlCommand類的CommandText屬性用于獲取或設(shè)置要對數(shù)據(jù)源執(zhí)行的Transact-SQL語句或存儲過程。CommandTimeout屬性用于設(shè)置獲取或設(shè)置在終止執(zhí)行命令的嘗試并生成錯誤之前的等待時間。如果SQL語句或者存儲過程中使用了參數(shù),可以通過Parameter屬性為參數(shù)設(shè)置值。SqlCommand命令對象提供了以下幾個基本方法來執(zhí)行命令:ExecuteNonQuery:可以通過該命令來執(zhí)行不需要返回值的操作,例如UPDATE、INSERT和DELETE等SQL命令。該命令不返回任何行,而只是返回執(zhí)行該命令時所影響到的表行數(shù)。ExecuteScalar:它可以執(zhí)行SELECT查詢,但返回的是一個單值,多用于查詢聚合值的情況,如使用count()或者sum()函數(shù)的SQL命令。ExecuteReader:該方法返回一個DataReader對象,內(nèi)容為與命令匹配的所有行。三、讀取數(shù)據(jù)1、使用SqlCommand類示例:演示如何使用SqlCommand類操作數(shù)據(jù)庫

添加一個名為SqlCmdTest.aspx,在該網(wǎng)頁的代碼文件中添加代碼:運行效果三、讀取數(shù)據(jù)2、使用OleDBCommand類OleDBCommand的使用方法和SqlCommand非常類似,由于上一節(jié)已經(jīng)介紹了如何編輯數(shù)據(jù),這里就不再贅述。下面介紹如何在數(shù)據(jù)庫文件Northwind.mdb中,進行查找記錄的操作。代碼如下:

三、讀取數(shù)據(jù)2、使用OleDBCommand類1.protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=D:\\ZhouMingHui\\ASP.NET2.0簡明教程\\代碼\\Northwind.mdb;Jet

OLEDB:DatabasePassword=111111";4.OleDbConnection

myConnection=newOleDbConnection(sqlconn);5.myConnection.Open();6.OleDbCommand

myCommand=newOleDbCommand("select*from運貨商",myConnection);7.OleDbDataReader

myReader;8.myReader=myCommand.ExecuteReader();9.Response.Write("<h3>使用OleDbCommand類讀取數(shù)據(jù)</h3><hr>");10.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");11.Response.Write("<tr

bgcolor=#DAB4B4>");12.for(inti=0;i<myReader.FieldCount;i++)13.{14.Response.Write("<td>"+myReader.GetName(i)+"</td>");15.}16.Response.Write("</tr>");17.while(myReader.Read())18.{19.Response.Write("<tr>");20.for(inti=0;i<myReader.FieldCount;i++)21.{22.Response.Write("<td>"+myReader[i].ToString()+"</td>");23.}24.Response.Write("</tr>");25.}26.Response.Write("</table>");27.myReader.Close();28.myConnection.Close();29.}三、讀取數(shù)據(jù)3、使用存儲過程存儲過程(StoredProcedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程具有允許標準組件式編程、能夠?qū)崿F(xiàn)較快的執(zhí)行速度、能夠減少網(wǎng)絡(luò)流量等優(yōu)點。通過SqlCommand和OleDBCommand調(diào)用存儲過程時,首先需要將其CommandType屬性設(shè)置為CommandType.StoredProcedure,這表示要執(zhí)行的是一個存儲過程。屬性的默認值為CommandType.Text,表示執(zhí)行SQL命令。另外該屬性值也可以設(shè)置為CommandType.TableDirect表示要直接訪問數(shù)據(jù)表,此時應該把將CommandText屬性設(shè)置為要訪問的一個或多個表的名稱。

三、讀取數(shù)據(jù)3、使用存儲過程示例代碼:1.protectedvoidPage_Load(objectsender,EventArgse) 2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();6.SqlCommand

myCommand=newSqlCommand();7.myCommand.Connection=myConnection;8.myCommand.CommandType=CommandType.StoredProcedure;9.myCommand.CommandText="byType";

10.SqlParameter

parInput=myCommand.Parameters.Add("@type",SqlDbType.SmallMoney);11.parInput.Direction=ParameterDirection.Input;12.parInput.Value=2;13.SqlDataReader

myReader=myCommand.ExecuteReader();.14.Response.Write("<h3>使用存儲過程查詢數(shù)據(jù)</h3><hr>");15.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");17.Response.Write("<tr

bgcolor=#DAB4B4>");18.for(inti=0;i<myReader.FieldCount;i++)19.{20.Response.Write("<td>"+myReader.GetName(i)+"</td>");21.}22.Response.Write("</tr>");23.while(myReader.Read())24.{25.Response.Write("<tr>");26.for(inti=0;i<myReader.FieldCount;i++)27.{28.Response.Write("<td>"+myReader[i].ToString()+"</td>");29.}30.Response.Write("</tr>");31.}32.Response.Write("</table>");33.myReader.Close();34.myConnection.Close();35.}

三、填充數(shù)據(jù)集1、使用DataAdapter數(shù)據(jù)適配器DataAdapter表示一組數(shù)據(jù)命令和一個數(shù)據(jù)庫連接,它們用于填充DataSet

和更新數(shù)據(jù)源。DataAdapter經(jīng)常和DataSet一起配合使用,作為DataSet

和數(shù)據(jù)源之間的橋接器以便檢索和保存數(shù)據(jù)。下面是幾種數(shù)據(jù)庫使用數(shù)據(jù)適配器的方法:MicrosoftSQLServer數(shù)據(jù)庫:可以通過將SqlDataAdapter與其關(guān)聯(lián)的SqlCommand和SqlConnection對象一起使用,從而提高總體性能。對于支持OLEDB的數(shù)據(jù)源:使用DataAdapter及其關(guān)聯(lián)的OleDbCommand和OleDbConnection對象。對于支持ODBC的數(shù)據(jù)源:使用DataAdapter及其關(guān)聯(lián)的OdbcCommand和OdbcConnection對象。對于Oracle數(shù)據(jù)庫:使用DataAdapter及其關(guān)聯(lián)的OracleCommand和OracleConnection

對象。使用數(shù)據(jù)適配器SqlDataAdapter的一般步驟如下:(1)建立數(shù)據(jù)庫連接(2)建立SqlCommand對象,設(shè)置要執(zhí)行的SQL語句(3)建立并實例化一個SqlDataAdapter對象。如果要執(zhí)行的SQL語句為Delete,則設(shè)置DeleteCommand屬性為SqlCommand對象;如果要執(zhí)行的SQL語句為Insert,則設(shè)置InsertCommand屬性為SqlCommand對象;如果要執(zhí)行的SQL語句為Select,則設(shè)置SelectCommand屬性為SqlCommand對象;如果要執(zhí)行的SQL語句為Update,則設(shè)置UpdateCommand屬性為SqlCommand對象。(4)建立一個DataSet對象,用于接收執(zhí)行SQL命令返回的數(shù)據(jù)集(5)填充數(shù)據(jù)集(6)綁定數(shù)據(jù)控件(7)關(guān)閉數(shù)據(jù)庫連接四、DataReader可以使用ADO.NETDataReader從數(shù)據(jù)庫中檢索只讀、只進的數(shù)據(jù)流。所謂“只讀”,是指在數(shù)據(jù)閱讀器DataReader上不可更新、刪除、增加記錄,所謂“只進”是指記錄的接收是順序進行且不可后退的,數(shù)據(jù)閱讀器DataReader接收到的數(shù)據(jù)是以數(shù)據(jù)庫的記錄為單位的。查詢結(jié)果在查詢執(zhí)行時返回,并存儲在客戶端的網(wǎng)絡(luò)緩沖區(qū)中,直到用戶使用DataReader的Read方法對它們發(fā)出請求。使用DataReader可以提高應用程序的性能,原因是它只要數(shù)據(jù)可用就立即檢索數(shù)據(jù),并且(默認情況下)一次只在內(nèi)存中存儲一行,減少了系統(tǒng)開銷。

四、DataReader1、使用DataReader使用DataReader對象的Read方法可從查詢結(jié)果中獲取行。通過向DataReader傳遞列的名稱或序號引用,可以訪問返回行的每一列。不過,為了實現(xiàn)最佳性能,DataReader

提供了一系列方法,使用戶能夠訪問其本機數(shù)據(jù)類型(GetDateTime、GetDouble、GetGuid、GetInt32等)的列值。DataReader

提供未緩沖的數(shù)據(jù)流,該數(shù)據(jù)流使過程邏輯可以有效地按順序處理從數(shù)據(jù)源中返回的結(jié)果。由于數(shù)據(jù)不在內(nèi)存中緩存,所以在檢索大量數(shù)據(jù)時,DataReader

是一種適合的選擇。當DataReader首先被填充時,它將被定位到Null記錄,直至第一次調(diào)用它的Read方法。這種方法與傳統(tǒng)ADO邏輯中默認情況下指向記錄集的第一條記錄是不同的。由于DataReader在執(zhí)行SQL命令時一直要保持同數(shù)據(jù)庫的連接,在DataReader對象在開啟的狀態(tài)下,DataReader將以獨占方式使用Connection,該對象所對應的Connection連接對象不能用來執(zhí)行其它的操作,如果Command包含輸出參數(shù)或返回值,那么在DataReader關(guān)閉之前,將無法訪問這些輸出參數(shù)或返回值。所以在使用完DataReader對象時,一定要使用Close方法關(guān)閉該DataReader對象,否則的話不僅會影響到數(shù)據(jù)庫連接的效率,更會阻止其它對象使用Connection連接對象來訪問數(shù)據(jù)庫。如果返回的是多個結(jié)果集,DataReader會提供NextResult方法來按順序循環(huán)訪問這些結(jié)果集。當DataReader打開時,可以使用GetSchemaTable方法檢索有關(guān)當前結(jié)果集的架構(gòu)信息。GetSchemaTable返回一個填充了行和列的DataTable對象,這些行和列包含當前結(jié)果集的架構(gòu)信息。對于結(jié)果集的每一列,DataTable都包含一行。架構(gòu)表行的每一列都映射到在結(jié)果集中返回的列的屬性,其中ColumnName是屬性的名稱,而列的值為屬性的值。四、DataReader2、示例示例:參見本書程序清單8.6.五、填充數(shù)據(jù)集1、使用DataAdapter示例:

頁面代碼:1.<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="DataAdapterTest.aspx.cs"Inherits="DataAdapterTest"%>2.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd">3.<htmlxmlns="/1999/xhtml">4.<headrunat="server">5.<title>演示DataAdapter的使用</title>6.</head>7.<bodyMS_POSITIONING="GridLayout">8.<h3>使用數(shù)據(jù)適配器</h3>9. <hr/>10. <formid="Form1"method="post"runat="server">11. <asp:GridViewid="DataGrid1"runat="server"Width="816px"Height="152px"></asp:GridView>12. </form>13.</body>14.</html>五、填充數(shù)據(jù)集1、使用DataAdapter示例:

后臺代碼:1. protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();6.SqlCommand

myCommand=newSqlCommand("select*fromProduct",myConnection);7.SqlDataAdapterAdapter=newSqlDataAdapter();8.Adapter.SelectCommand=myCommand;9.DataSet

myDs=newDataSet();10.Adapter.Fill(myDs);11.GridView1.DataSource=myDs.Tables[0].DefaultView;12.GridView1.DataBind();13.myConnection.Close();14.}

五、填充數(shù)據(jù)集1、使用DataAdapter示例:

運行效果五、填充數(shù)據(jù)集2、使用DataTable,DataColumn,DataRowDataSet由一組DataTable對象組成,它具備存儲多個表數(shù)據(jù)以及表間關(guān)系的能力。這些表就存儲在DataTable對象中,而表間的關(guān)系則用DataRelation對象表示。DataTable對象中包含了DataRow和DataColumn對象,分別存放表中行和列的數(shù)據(jù)信息。Tables屬性可以獲取包含在DataSet中的表的集合。DataTable的Rows屬性表示數(shù)據(jù)表中行的集合,DataTable的Columns屬性表示數(shù)據(jù)表中列的集合。

五、填充數(shù)據(jù)集2、使用DataTable,DataColumn,DataRow示例:1.protectedvoidPage_Load(objectsender,EventArgse)2.{3.Stringsqlconn="DataSource=HZIEE-2E53F913F;InitialCatalog=SuperMarket;IntegratedSecurity=True";4.SqlConnection

myConnection=newSqlConnection(sqlconn);5.myConnection.Open();

6.SqlCommand

myCommand=newSqlCommand("select*fromProduct",myConnection);7.SqlDataAdapterAdapter=newSqlDataAdapter();8.Adapter.SelectCommand=myCommand;9.DataSet

myDs=newDataSet();10.Adapter.Fill(myDs);11.Response.Write("<h3>使用DataTable、DataColumn和DataRow</h3><hr>");12.Response.Write("<tableborder=1cellspacing=0cellpadding=2>");13.DataTable

myTable=myDs.Tables[0];14.Response.Write("<tr

bgcolor=#DAB4B4>");15.foreach(DataColumn

myColumninmyTable.Columns)16.{17.Response.Write("<td>"+myColumn.ColumnName+"</td>");18.}19.Response.Write("</tr>");20.foreach(DataRow

myRowinmyTable.Rows)21.{22.Response.Write("<tr>");23.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論