亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

深入分析ADO.NET中的DataSet對象

2019-11-18 19:23:24
字體:
來源:轉載
供稿:網友
  ADO.NET是.Net FrameWork SDK中用以操作數據庫的類庫的總稱。而DataSet類則是ADO.NET中最核心的成員之一,也是各種開發基于.Net平臺程序語言開發數據庫應用程序最常接觸的類。之所以DataSet類在ADO.NET中具有特殊的地位,是因為DataSet在ADO.NET實現從數據庫抽取數據中起到關鍵作用,在從數據庫完成數據抽取后,DataSet就是數據的存放地,它是各種數據源中的數據在計算機內存中映射成的緩存,所以有時說DataSet可以看成是一個數據容器。同時它在客戶端實現讀取、更新數據庫等過程中起到了中間部件的作用(DataReader只能檢索數據庫中的數據)。

  各種.Net平臺開發語言開發數據庫應用程序,一般并不直接對數據庫操作(直接在程序中調用存儲過程等除外),而是先完成數據連接和通過數據適配器填充DataSet對象,然后客戶端再通過讀取DataSet來獲得需要的數據,同樣更新數據庫中數據,也是首先更新DataSet,然后再通過DataSet來更新數據庫中對應的數據的??梢娏私?、掌握ADO.NET,首先必須了解、掌握DataSet。DataSet主要有三個特性:

  1. 獨立性。DataSet獨立于各種數據源。微軟公司在推出DataSet時就考慮到各種數據源的多樣性、復雜性。在.Net中,無論什么類型數據源,它都會提供一致的關系編程模型,而這就是DataSet。

  2. 離線(斷開)和連接。DataSet既可以以離線方式,也可以以實時連接來操作數據庫中的數據。這一點有點像ADO中的RecordSet。

  3. DataSet對象是一個可以用xml形式表示的數據視圖,是一種數據關系視圖。

  一.DataSet對象的結構模型及和RecordSet的比較

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


圖01:DataSet對象的結構模型圖

  通過圖01可見在DataSet對象結構還是非常復雜的,在DataSet對象的下一層中是DataTableCollection對象、DataRelationCollection對象和ExtendedPRoperties對象。上文已經說過,每一個DataSet對象是由若干個DataTable對象組成。DataTableCollection就是管理DataSet中的所有DataTable對象。表示DataSet中兩個DataTable對象之間的父/子關系是DataRelation對象。它使一個DataTable 中的行與另一個DataTable中的行相關聯。這種關聯類似于關系數據庫中數據表之間的主鍵列和外鍵列之間的關聯。DataRelationCollection對象就是管理DataSet中所有DataTable之間的DataRelation關系的。在DataSet中DataSet、DataTable和DataColumn都具有ExtendedProperties屬性。ExtendedProperties其實是一個屬性集(PropertyCollection),用以存放各種自定義數據,如生成數據集的SELECT語句等。

  二.使用DataSet:

  DataSet其實就是數據集,上文已經說過DataSet是把數據庫中的數據映射到內存緩存中的所構成的數據容器,對于任何數據源,它都提供一致的關系編程模型。在DataSet中既定義了數據表的約束關系以及數據表之間的關系,還可以對數據表中的數據進行排序等。DataSet使用方法一般有三種:

  1. 把數據庫中的數據通過DataAdapter對象填充DataSet。

  2. 通過DataAdapter對象操作DataSet實現更新數據庫。

  3. 把XML數據流或文本加載到DataSet。

  下面就來詳細探討以上DataSet使用方法的具體實現,使用語言是C#。

  1. 把數據庫中的數據通過DataAdapter對象填充DataSet:

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

  在這些數據提供者中都有一個DataAdapter類,如:OLE DB .NET Framework 數據提供者中是 OleDbDataAdapter類,The SQL Server .NET Framework 數據提供者中是SqlDataAdapter類,The ODBC .NET Framework 數據提供者中是OdbcDataAdapter類。通過這些DataAdapter就能夠實現從數據庫中檢索數據并填充 DataSet 中的表。

  DataAdapter填充DataSet的過程分為二步:首先通過DataAdapter的SelectCommand屬性從數據庫中檢索出需要的數據。SelectCommand其實是一個Command對象。然后再通過DataAdapter的Fill方法把檢索來的數據填充 DataSet。代碼清單01就是以Microsoft SQL Server 中的Northwind數據庫為對象,C#使用The SQL Server .NET Data Provider中的SqlDataAdapter填充DataSet的具體實現方法:

  代碼清單01:

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

  對于其他數據提供者的DataAdapter,具體的實現檢索數據庫中的數據并填充DataSet的實現方法類似于以上方法。

  2. 通過DataAdapter對象操作DataSet實現更新數據庫:

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

  代碼清單02: 

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


  由于不了解DataSet結構和與數據庫關系,很多初學者往往只是更新了DataSet中的數據,就認為數據庫中的數據也隨之更新,所以當打開數據庫瀏覽時發現并沒有更新數據,都會比較疑惑,通過上面的介紹,疑惑應當能夠消除了。

  3. XML和DataSet:

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

  三.DataSet和數據綁定(DataBinding)

  數據綁定是數據綁定是綁定技術中使用最頻繁,也是最為重要的技術,也可以說是各種.Net開發語言開發數據庫應用程序最需要掌握的基本的知識之一。數據綁定之所以很重要,是因為在.Net FrameWork SDK中并沒有提供數據庫開發的相關組件,即如:DbTextBox、DbLabel等用于數據庫開發的常用組件在.Net FrameWork SDK中都沒有。而數據綁定技術則能夠把TextBox組件"改造"成DbTextBox組件,把Label組件"改造"成DbLabel組件等等。所有這些都與DataSet有直接關系。

  數據綁定分成二類:簡單型數據綁定和復雜型數據綁定。適用于簡單型數據綁定組件一般有Lable、TextBox等,適用于復雜性數據綁定的組件一般有DataGrid、ListBox、ComboBox等。其實簡單型數據綁定和復雜性數據綁定并沒有明確的區分,只是在組件進行數據綁定時,一些結構復雜一點的組件在數據綁定時操作步驟相近,而另外一些結構簡單一點的組件在數據綁定時也比較類似。于是也就產生了二個類別。以下就結合TextBox組件和DataGrid組件分別探討DataSet在實現簡單型數據綁定和復雜性數據綁定作用和具體實現方法。

  1. 簡單型數據綁定:

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

  代碼清單03:

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

  2. 復雜性數據綁定:

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

  代碼清單04:

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

  四.總結

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情乱人伦| 午夜精品久久久久久久99热| 欧美网站在线观看| 91性高湖久久久久久久久_久久99| 欧美性猛xxx| 97超级碰碰碰| 成人情趣片在线观看免费| 91av网站在线播放| 午夜精品福利在线观看| 欧美贵妇videos办公室| 亚洲欧洲日产国产网站| 奇米影视亚洲狠狠色| 国语自产精品视频在线看| 欧美黑人性视频| 色悠悠国产精品| 日韩av网站在线| 亚洲最大的网站| 夜夜嗨av一区二区三区四区| 91国内产香蕉| 亚洲第一中文字幕| 在线观看中文字幕亚洲| 日韩成人网免费视频| 国产精品久久久久久久电影| 亚洲男人的天堂网站| 日韩精品中文字幕久久臀| 7777精品视频| 亚洲成人在线视频播放| 中文字幕亚洲情99在线| 亚洲jizzjizz日本少妇| 国产精品青青在线观看爽香蕉| 亚洲视频在线观看| 亚洲欧美激情精品一区二区| 亚洲性日韩精品一区二区| 揄拍成人国产精品视频| 国产精品精品视频| 国产精品久久久久av免费| 国产视频在线观看一区二区| 欧美性生活大片免费观看网址| 九九精品视频在线| 欧美特黄级在线| 日韩av最新在线| 日韩风俗一区 二区| 欧美精品久久久久久久久| 人妖精品videosex性欧美| 国产一区二区三区在线免费观看| 国产精品视频一区国模私拍| 日韩免费在线视频| 在线日韩精品视频| 成人国产在线激情| 91高清在线免费观看| 日韩欧美国产网站| 欧美www视频在线观看| 国产精品无av码在线观看| 成人在线一区二区| 午夜免费在线观看精品视频| 正在播放欧美一区| 欧美超级免费视 在线| 国产视频精品一区二区三区| 伊人伊人伊人久久| 久久资源免费视频| 国产成人精品久久| 欧美有码在线观看| 欧美一级电影免费在线观看| 国产欧美精品日韩精品| 清纯唯美亚洲激情| 国产精品色婷婷视频| 国产亚洲人成网站在线观看| 国产精品日韩电影| 国产精品亚洲综合天堂夜夜| 理论片在线不卡免费观看| 欧美中文在线观看国产| 日韩在线观看免费高清| 久久亚洲精品小早川怜子66| 91chinesevideo永久地址| 97涩涩爰在线观看亚洲| 欧美第一淫aaasss性| 日韩精品在线视频| 久久激情视频久久| 91精品久久久久久久久不口人| 日韩欧美中文第一页| 久久99国产精品自在自在app| 欧美精品精品精品精品免费| 日韩网站免费观看高清| www欧美日韩| 亚洲最大福利网站| 国产成人精品综合| 国产一区二区日韩精品欧美精品| 欧美美女18p| 亚洲有声小说3d| 日韩精品在线观看网站| 国产欧美日韩亚洲精品| 欧洲成人午夜免费大片| 久久精品国产久精国产思思| 亚洲一区美女视频在线观看免费| 深夜福利国产精品| 亚洲欧美国产视频| 国产精品福利片| 日韩电影免费在线观看| 亚洲区免费影片| 国产主播喷水一区二区| 久久国产一区二区三区| 中文字幕亚洲一区二区三区| 亚洲免费小视频| 2019日本中文字幕| 97精品视频在线观看| 久久69精品久久久久久国产越南| 久久91超碰青草是什么| 欧美精品18videosex性欧美| 中文字幕精品www乱入免费视频| 成人网页在线免费观看| 欧美成人午夜免费视在线看片| 国产精品久久久久久亚洲影视| 亚洲激情电影中文字幕| 日韩电视剧在线观看免费网站| 九九热精品视频在线播放| 欧美韩日一区二区| 久久久久久噜噜噜久久久精品| 91网站免费观看| 国产欧美最新羞羞视频在线观看| 欧美大片欧美激情性色a∨久久| 国产精品一区二区三区免费视频| 国产精品欧美一区二区| 色偷偷av亚洲男人的天堂| 最新的欧美黄色| 欧美性少妇18aaaa视频| 国产综合在线视频| 精品视频在线播放色网色视频| 欧美性生交大片免费| 免费av在线一区| 欧美巨乳在线观看| 最近中文字幕2019免费| 深夜精品寂寞黄网站在线观看| 亚洲第一页中文字幕| 狠狠躁夜夜躁人人躁婷婷91| 色综合视频一区中文字幕| 亚洲国产成人精品久久久国产成人一区| 国产精品成人国产乱一区| 色与欲影视天天看综合网| 日韩视频―中文字幕| 亚洲国产美女精品久久久久∴| 成人激情视频在线播放| 少妇精69xxtheporn| 91麻豆国产语对白在线观看| 中文字幕一区二区三区电影| 久久精品视频在线播放| 精品国产一区久久久| 欧美久久精品一级黑人c片| 国产精品欧美久久久| 国产网站欧美日韩免费精品在线观看| 欧美一级在线播放| 最近2019中文字幕第三页视频| 日本在线观看天堂男亚洲| 国产精品亚洲视频在线观看| 欧美高清自拍一区| 欧美孕妇与黑人孕交| 少妇精69xxtheporn| 亚洲女人被黑人巨大进入| 亚洲精品久久久久国产| 国产亚洲精品高潮| 国产精品成人观看视频国产奇米| 国产成人在线一区| 国产精品免费久久久久影院| 日韩美女av在线| 国产精品精品久久久|