2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

DropDownList控件的數(shù)據(jù)綁定技術(shù)

 悟靜 2011-07-16
以DropDownList控件為例講一下asp.net的數(shù)據(jù)綁定技術(shù),適合初手閱讀,高手免讀。

System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection();
sqlconn.C;
sqlconn.Open();
System.Data.SqlClient.SqlDataAdapter sqldar = new System.Data.SqlClient.SqlDataAdapter("select UserName from forums_Users",sqlconn);
sqldar.SelectCommand.CommandType = CommandType.Text;
System.Data.DataSet DataSet1= new System.Data.DataSet();
sqldar.Fill(DataSet1,"Users");
DropDownList1.DataSource = DataSet1.Tables["Users"].DefaultView;
DropDownList1.DataTextField="UsersName";
DropDownList1.DataBind();
sqlconn.Close();
第一行是創(chuàng)建一個(gè)sql連接對(duì)象sqlconn;
第二行是給新建的sql連接對(duì)象sqlconn的連接字符串賦予正確的值;
第三行是讓sql連接對(duì)象sqlconn打開,連接sql數(shù)據(jù)庫(kù);
第四行是創(chuàng)建一個(gè)sql適配器對(duì)象sqldar,并同時(shí)讓其使用sqlconn對(duì)象執(zhí)行一條sql查詢語(yǔ)句;
第五行是設(shè)置sqldar對(duì)象的命令類型為文本型;
第六行是創(chuàng)建一個(gè)數(shù)據(jù)集對(duì)象DataSet1;
第七行是將sqldar執(zhí)行的結(jié)果填充到DataSet1中,并將命名為Users;
第八行是將DropDownList的數(shù)據(jù)源設(shè)置為DataSet1的Users,并使用默認(rèn)的查看模式;
第九行是設(shè)置DropDownList空間的顯示項(xiàng)對(duì)應(yīng)的字段名UsersName;
第十行是執(zhí)行DropDownList的數(shù)據(jù)綁定方法;
第十一行是關(guān)閉sqlconn對(duì)象。

*** 這段代碼就是實(shí)現(xiàn)了DropDownList的選擇項(xiàng)為Users表中的UsersName,只是一個(gè)簡(jiǎn)單的示范,通常在使用過(guò)長(zhǎng)中會(huì)更細(xì)致甚至更麻煩一些,但是基本的思想是一樣的:創(chuàng)建你需要的數(shù)據(jù)源,讓指定的server端web控件與你的數(shù)據(jù)源綁定,指定顯示項(xiàng)和顯示項(xiàng)對(duì)應(yīng)的value。

 

深入分析ADO.NET中的DataSet對(duì)象

ADO.NET是.Net FrameWork SDK中用以操作數(shù)據(jù)庫(kù)的類庫(kù)的總稱。而DataSet類則是ADO.NET中最核心的成員之一,也是各種開發(fā)基于.Net平臺(tái)程序語(yǔ)言開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序最常接觸的類。之所以DataSet類在ADO.NET中具有特殊的地位,是因?yàn)镈ataSet在ADO.NET實(shí)現(xiàn)從數(shù)據(jù)庫(kù)抽取數(shù)據(jù)中起到關(guān)鍵作用,在從數(shù)據(jù)庫(kù)完成數(shù)據(jù)抽取后,DataSet就是數(shù)據(jù)的存放地,它是各種數(shù)據(jù)源中的數(shù)據(jù)在計(jì)算機(jī)內(nèi)存中映射成的緩存,所以有時(shí)說(shuō)DataSet可以看成是一個(gè)數(shù)據(jù)容器。同時(shí)它在客戶端實(shí)現(xiàn)讀取、更新數(shù)據(jù)庫(kù)等過(guò)程中起到了中間部件的作用(DataReader只能檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù))。

  各種.Net平臺(tái)開發(fā)語(yǔ)言開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序,一般并不直接對(duì)數(shù)據(jù)庫(kù)操作(直接在程序中調(diào)用存儲(chǔ)過(guò)程等除外),而是先完成數(shù)據(jù)連接和通過(guò)數(shù)據(jù)適配器填充DataSet對(duì)象,然后客戶端再通過(guò)讀取DataSet來(lái)獲得需要的數(shù)據(jù),同樣更新數(shù)據(jù)庫(kù)中數(shù)據(jù),也是首先更新DataSet,然后再通過(guò)DataSet來(lái)更新數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)的??梢娏私狻⒄莆誂DO.NET,首先必須了解、掌握DataSet。DataSet主要有三個(gè)特性:

  1. 獨(dú)立性。DataSet獨(dú)立于各種數(shù)據(jù)源。微軟公司在推出DataSet時(shí)就考慮到各種數(shù)據(jù)源的多樣性、復(fù)雜性。在.Net中,無(wú)論什么類型數(shù)據(jù)源,它都會(huì)提供一致的關(guān)系編程模型,而這就是DataSet。

  2. 離線(斷開)和連接。DataSet既可以以離線方式,也可以以實(shí)時(shí)連接來(lái)操作數(shù)據(jù)庫(kù)中的數(shù)據(jù)。這一點(diǎn)有點(diǎn)像ADO中的RecordSet。

  3. DataSet對(duì)象是一個(gè)可以用XML形式表示的數(shù)據(jù)視圖,是一種數(shù)據(jù)關(guān)系視圖。

  一.DataSet對(duì)象的結(jié)構(gòu)模型及和RecordSet的比較

  雖說(shuō)ADO.NET是 ADO在.Net平臺(tái)下得后繼版本,但二者的區(qū)別是很大的。突出表現(xiàn)在ADO中的RecordSet對(duì)象和ADO.NET中的DataSet對(duì)象。RecordSet其實(shí)也是非常靈活的一個(gè)對(duì)象,微軟公司推出它也是煞費(fèi)苦心,如:RecordSet可以離線操作數(shù)據(jù)庫(kù),性能優(yōu)良,效率較高等等這些都讓當(dāng)時(shí)的程序員為之一振。RecordSet雖然已經(jīng)很復(fù)雜,但DataSet卻比RecordSet復(fù)雜的多,我們知道每一DataSet往往是一個(gè)或多個(gè)DataTable 對(duì)象的集合,這些對(duì)象由數(shù)據(jù)行和數(shù)據(jù)列以及主鍵、外鍵、約束和有關(guān)DataTable對(duì)象中數(shù)據(jù)的關(guān)系信息組成。而RecordSet只能存放單張數(shù)據(jù)表,雖然這張數(shù)據(jù)表可以由幾張數(shù)據(jù)表JOIN生成。所以有些時(shí)候說(shuō),RecordSet更類似于DataSet中的DataTable。DataSet對(duì)象的結(jié)構(gòu)模型如圖01所示:


圖01:DataSet對(duì)象的結(jié)構(gòu)模型圖

  通過(guò)圖01可見在DataSet對(duì)象結(jié)構(gòu)還是非常復(fù)雜的,在DataSet對(duì)象的下一層中是DataTableCollection對(duì)象、DataRelationCollection對(duì)象和ExtendedProperties對(duì)象。上文已經(jīng)說(shuō)過(guò),每一個(gè)DataSet對(duì)象是由若干個(gè)DataTable對(duì)象組成。DataTableCollection就是管理DataSet中的所有DataTable對(duì)象。表示DataSet中兩個(gè)DataTable對(duì)象之間的父/子關(guān)系是DataRelation對(duì)象。它使一個(gè)DataTable 中的行與另一個(gè)DataTable中的行相關(guān)聯(lián)。這種關(guān)聯(lián)類似于關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)表之間的主鍵列和外鍵列之間的關(guān)聯(lián)。DataRelationCollection對(duì)象就是管理DataSet中所有DataTable之間的DataRelation關(guān)系的。在DataSet中DataSet、DataTable和DataColumn都具有ExtendedProperties屬性。ExtendedProperties其實(shí)是一個(gè)屬性集(PropertyCollection),用以存放各種自定義數(shù)據(jù),如生成數(shù)據(jù)集的SELECT語(yǔ)句等。

  二.使用DataSet:

  DataSet其實(shí)就是數(shù)據(jù)集,上文已經(jīng)說(shuō)過(guò)DataSet是把數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射到內(nèi)存緩存中的所構(gòu)成的數(shù)據(jù)容器,對(duì)于任何數(shù)據(jù)源,它都提供一致的關(guān)系編程模型。在DataSet中既定義了數(shù)據(jù)表的約束關(guān)系以及數(shù)據(jù)表之間的關(guān)系,還可以對(duì)數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行排序等。DataSet使用方法一般有三種:

  1. 把數(shù)據(jù)庫(kù)中的數(shù)據(jù)通過(guò)DataAdapter對(duì)象填充DataSet。

  2. 通過(guò)DataAdapter對(duì)象操作DataSet實(shí)現(xiàn)更新數(shù)據(jù)庫(kù)。

  3. 把XML數(shù)據(jù)流或文本加載到DataSet。

  下面就來(lái)詳細(xì)探討以上DataSet使用方法的具體實(shí)現(xiàn),使用語(yǔ)言是C#。

  1. 把數(shù)據(jù)庫(kù)中的數(shù)據(jù)通過(guò)DataAdapter對(duì)象填充DataSet:

  掌握DataSet使用方法必須掌握ADO.NET另外一個(gè)核心常用成員--數(shù)據(jù)提供者(Data Provider)。數(shù)據(jù)提供者(也稱為托管提供者M(jìn)anaged Provider)是一個(gè)類集合,在.Net FrameWork SDK 1.0中數(shù)據(jù)提供者分為二種:The SQL Server .NET Data Provider和The OLE DB .NET Data Provider。而到了.Net FrameWork SDK 1.1時(shí),ADO.NET中又增加了The ODBC .NET Data Provider和 The Oracle .NET Data Provider二個(gè)數(shù)據(jù)提供者。The SQL Server .NET Data Provider的操作數(shù)據(jù)庫(kù)對(duì)象只限于Sql Server 7.0及以上版本,Oracle .NET Data Provider的操作數(shù)據(jù)庫(kù)對(duì)象只限于Oracle 8.1.7及以上版本。而The OLE DB .NET Data Provider和The ODBC .NET Data Provider可操作的數(shù)據(jù)庫(kù)類型就相對(duì)多了許多,只要它們?cè)诒镜胤謩e提供Ole Db提供程序和ODBC提供程序。

  在這些數(shù)據(jù)提供者中都有一個(gè)DataAdapter類,如:OLE DB .NET Framework 數(shù)據(jù)提供者中是 OleDbDataAdapter類,The SQL Server .NET Framework 數(shù)據(jù)提供者中是SqlDataAdapter類,The ODBC .NET Framework 數(shù)據(jù)提供者中是OdbcDataAdapter類。通過(guò)這些DataAdapter就能夠?qū)崿F(xiàn)從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)并填充 DataSet 中的表。

  DataAdapter填充DataSet的過(guò)程分為二步:首先通過(guò)DataAdapter的SelectCommand屬性從數(shù)據(jù)庫(kù)中檢索出需要的數(shù)據(jù)。SelectCommand其實(shí)是一個(gè)Command對(duì)象。然后再通過(guò)DataAdapter的Fill方法把檢索來(lái)的數(shù)據(jù)填充 DataSet。代碼清單01就是以Microsoft SQL Server 中的Northwind數(shù)據(jù)庫(kù)為對(duì)象,C#使用The SQL Server .NET Data Provider中的SqlDataAdapter填充DataSet的具體實(shí)現(xiàn)方法:

  代碼清單01:

SqlConnection sqlConnection1 = new SqlConnection ( "Data Source=localhost ;Integrated Security=SSPI ;Initial Catalog=Northwind" ) ;
//創(chuàng)建數(shù)據(jù)連接
SqlCommand selectCMD = new SqlCommand ( "SELECT CustomerID , CompanyName FROM Customers" , sqlConnection1 ) ;
//創(chuàng)建并初始化SqlCommand對(duì)象
SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter ( ) ;
custDA.SelectCommand = selectCMD ;
sqlConnection.Open ( ) ;
//創(chuàng)建SqlDataAdapter對(duì)象,并根據(jù)SelectCommand屬性檢索數(shù)據(jù)
DataSet dsDataSet1 = new DataSet ( ) ;
sqlDataAdapter1.Fill ( dsDataSet1 , "Customers" ) ;
//使用SqlDataAdapter的Fill方法填充DataSet
sqlConnection.Close ( ) ;
//關(guān)閉數(shù)據(jù)連接

  對(duì)于其他數(shù)據(jù)提供者的DataAdapter,具體的實(shí)現(xiàn)檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù)并填充DataSet的實(shí)現(xiàn)方法類似于以上方法。

  2. 通過(guò)DataAdapter對(duì)象操作DataSet實(shí)現(xiàn)更新數(shù)據(jù)庫(kù):

  DataAdapter是通過(guò)其Update方法實(shí)現(xiàn)以DataSet中數(shù)據(jù)來(lái)更新數(shù)據(jù)庫(kù)的。當(dāng)DataSet實(shí)例中包含數(shù)據(jù)發(fā)生更改后,此時(shí)調(diào)用Update方法,DataAdapter 將分析已作出的更改并執(zhí)行相應(yīng)的命令(INSERT、UPDATE 或 DELETE),并以此命令來(lái)更新數(shù)據(jù)庫(kù)中的數(shù)據(jù)。如果DataSet中的DataTable是映射到單個(gè)數(shù)據(jù)庫(kù)表或從單個(gè)數(shù)據(jù)庫(kù)表生成,則可以利用 CommandBuilder 對(duì)象自動(dòng)生成 DataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。使用DataAdapter對(duì)象操作DataSet實(shí)現(xiàn)更新數(shù)據(jù)庫(kù)具體的實(shí)現(xiàn)方法,只需把下面的代碼清單02添加到代碼清單01之后,二者合并即可實(shí)現(xiàn)刪除Customers數(shù)據(jù)表中第一行數(shù)據(jù):

  代碼清單02: 

SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder ( sqlDataAdapter1 ) ;
//以sqlDataAdapter1為參數(shù)來(lái)初始化SqlCommandBuilder實(shí)例
dsDataSet1.Tables["Customers"].Rows[0].Delete ( ) ;
//刪除DataSet中刪除數(shù)據(jù)表Customers中第一行數(shù)據(jù)
sqlDataAdapter1.Update ( dsDataSet1 ,"Customers" ) ;
//調(diào)用Update方法,以DataSet中的數(shù)據(jù)更新從數(shù)據(jù)庫(kù)
dsDataSet1.Tables["Customers"].AcceptChanges ( ) ;

  由于不了解DataSet結(jié)構(gòu)和與數(shù)據(jù)庫(kù)關(guān)系,很多初學(xué)者往往只是更新了DataSet中的數(shù)據(jù),就認(rèn)為數(shù)據(jù)庫(kù)中的數(shù)據(jù)也隨之更新,所以當(dāng)打開數(shù)據(jù)庫(kù)瀏覽時(shí)發(fā)現(xiàn)并沒(méi)有更新數(shù)據(jù),都會(huì)比較疑惑,通過(guò)上面的介紹,疑惑應(yīng)當(dāng)能夠消除了。

  3. XML和DataSet:

  DataSet中的數(shù)據(jù)可以從XML數(shù)據(jù)流或文檔創(chuàng)建。并且.Net Framework可以控制加載XML數(shù)據(jù)流或文檔中那些數(shù)據(jù)以及如何創(chuàng)建DataSet的關(guān)系結(jié)構(gòu)。加載XML數(shù)據(jù)流和文檔到DataSet中是可使用DataSet對(duì)象的ReadXml方法(注意:ReadXml來(lái)加載非常大的文件,則性能會(huì)有所下降)。ReadXml 方法將從文件、流或 XmlReader 中進(jìn)行讀取,并將 XML 的源以及可選的 XmlReadMode 參數(shù)用作參數(shù)。該ReadXml方法讀取 XML 流或文檔的內(nèi)容并將數(shù)據(jù)加載到 DataSet 中。根據(jù)所指定的XmlReadMode和關(guān)系架構(gòu)是否已存在,它還將創(chuàng)建DataSet的關(guān)系架構(gòu)。

  三.DataSet和數(shù)據(jù)綁定(DataBinding)

  數(shù)據(jù)綁定是數(shù)據(jù)綁定是綁定技術(shù)中使用最頻繁,也是最為重要的技術(shù),也可以說(shuō)是各種.Net開發(fā)語(yǔ)言開發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序最需要掌握的基本的知識(shí)之一。數(shù)據(jù)綁定之所以很重要,是因?yàn)樵?Net FrameWork SDK中并沒(méi)有提供數(shù)據(jù)庫(kù)開發(fā)的相關(guān)組件,即如:DbTextBox、DbLabel等用于數(shù)據(jù)庫(kù)開發(fā)的常用組件在.Net FrameWork SDK中都沒(méi)有。而數(shù)據(jù)綁定技術(shù)則能夠把TextBox組件"改造"成DbTextBox組件,把Label組件"改造"成DbLabel組件等等。所有這些都與DataSet有直接關(guān)系。

  數(shù)據(jù)綁定分成二類:簡(jiǎn)單型數(shù)據(jù)綁定和復(fù)雜型數(shù)據(jù)綁定。適用于簡(jiǎn)單型數(shù)據(jù)綁定組件一般有Lable、TextBox等,適用于復(fù)雜性數(shù)據(jù)綁定的組件一般有DataGrid、ListBox、ComboBox等。其實(shí)簡(jiǎn)單型數(shù)據(jù)綁定和復(fù)雜性數(shù)據(jù)綁定并沒(méi)有明確的區(qū)分,只是在組件進(jìn)行數(shù)據(jù)綁定時(shí),一些結(jié)構(gòu)復(fù)雜一點(diǎn)的組件在數(shù)據(jù)綁定時(shí)操作步驟相近,而另外一些結(jié)構(gòu)簡(jiǎn)單一點(diǎn)的組件在數(shù)據(jù)綁定時(shí)也比較類似。于是也就產(chǎn)生了二個(gè)類別。以下就結(jié)合TextBox組件和DataGrid組件分別探討DataSet在實(shí)現(xiàn)簡(jiǎn)單型數(shù)據(jù)綁定和復(fù)雜性數(shù)據(jù)綁定作用和具體實(shí)現(xiàn)方法。

  1. 簡(jiǎn)單型數(shù)據(jù)綁定:

  簡(jiǎn)單型數(shù)據(jù)綁定一般使用這些組件中的DataBindings屬性的Add方法把DataSet中某一個(gè)DataTable中的某一行和組件的某個(gè)屬性綁定起來(lái),從而達(dá)到顯示數(shù)據(jù)的效果。TextBox組件的數(shù)據(jù)綁定具體實(shí)現(xiàn)方法是在代碼清單01后,再添加代碼清單03中的代碼,代碼清單03中的代碼是把DataSet中的Customers 數(shù)據(jù)表中的"CustomerID"的數(shù)據(jù)和TextBox的Text屬性綁定起來(lái),這樣DbTextBox就產(chǎn)生了。其他適用于簡(jiǎn)單型數(shù)據(jù)綁定組件數(shù)據(jù)綁定的方法類似與此操作:

  代碼清單03:

textBox1.DataBindings.Add ( "Text" , dsDataSet1, " Customers. CustomerID " ) ;

  2. 復(fù)雜性數(shù)據(jù)綁定:

  復(fù)雜性數(shù)據(jù)綁定一般是設(shè)定組件的DataSource屬性和DisplayMember屬性來(lái)完成數(shù)據(jù)綁定的。DataSource屬性值一般設(shè)定為要綁定的DataSet,DisplayMember屬性值一般設(shè)定為要綁定的數(shù)據(jù)表或數(shù)據(jù)表中的某一列。DataGrid組件的數(shù)據(jù)綁定的一般實(shí)現(xiàn)方法是在代碼清單01后,再添加代碼清單04中的代碼,代碼清單04的功能是把DataSet中的Customers 數(shù)據(jù)表和DataGrid綁定起來(lái)。其他適用于復(fù)雜性數(shù)據(jù)綁定的組件實(shí)現(xiàn)數(shù)據(jù)綁定的方法類似此操作:

  代碼清單04:

dataGrid1.DataSource = dsDataSet1 ;
dataGrid1.DataMember = " Customers " ;

  四.總結(jié)

  DataSet類是ADO.NET中一個(gè)非常重要的核心成員,它是數(shù)據(jù)庫(kù)中的數(shù)據(jù)在本地計(jì)算機(jī)中映射成的緩存。對(duì)DataSet的任何操作,都是在計(jì)算機(jī)緩存中完成的。理解這一點(diǎn)是掌握DataSet的第一步。DataSet雖然結(jié)構(gòu)復(fù)雜。但只要區(qū)分DataSet對(duì)象中各個(gè)組成部件及其相互關(guān)系,掌握也不算太困難。本文覆蓋了DataSet的特性、結(jié)構(gòu)、以及具體的使用方法等等,相信這些對(duì)您掌握這個(gè)ADO.NET中核心成員是有所幫助

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多