欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
XML與DataSet的互轉

XML與DataSet的互轉

XML與DataSet進(jìn)行交互是非常容易的,無(wú)論是XML文件還是XML字符串。而我們現在主要用的都是XML字符串的方式。即使用DataSet.GetXml()方式。

        一般來(lái)說(shuō),用DataSet生成的Xml格式應該是如下方式:
<NewDataSet>
    <Table>
        <Columns1>……</Columns1>
        <Columns2>……</Columns2>
    </Table>
    <Table>
        <Columns1>……</Columns1>
        <Columns2>……</Columns2>

    </Table>
    <Table1>
        ……
    </Table1>
</NewDataSet>
        上面是一個(gè)基本的格式的由DataSet轉成的XML,其并不包含Schema。在VS.net的開(kāi)發(fā)中,無(wú)論你是綁定XML,還是DataSet,效果都是一樣的。
        現在我來(lái)解釋一下DataSet生成XML的格式:
        應該可以看到,首先是根結點(diǎn):<NewDataSet />  這個(gè)應該不用多說(shuō),再其下我們可以看到<Table />、<Table1 />等等這樣的子結點(diǎn)。當在DataSet中只有一個(gè)表的時(shí)候,在XML中只會(huì )有<Table>結點(diǎn),而當DataSet中有多個(gè)表的時(shí)候,在XML中會(huì )將這些Tabel表示出來(lái),第1個(gè)表為<Table />,第2個(gè)表為<Table1 />,第3個(gè)表為<Table2 />…………。而且如何在一個(gè)表中具有多行的時(shí)候,每一行都會(huì )放到一個(gè)<Table />結點(diǎn)中。假如我們有一個(gè)表中有兩個(gè)字段:ID與NAME,則按上述示例,在XML中的表示為:
<NewDataSet>
    <Table>
        <ID>ID1</ID>
        <NAME>NAME1</NAME>
    </Table>
    <Table>
        <ID>ID2</ID>
        <NAME>NAME2</NAME>

    </Table>

</NewDataSet>
        但是如果你足夠細心去留意這些的話(huà),就會(huì )發(fā)現,當在數據表中的某個(gè)字段為空值(即為null,而并非為”")時(shí),其根本不會(huì )顯示在XML上,這就造成了當需要對XML進(jìn)行數據綁定的時(shí)候,根本無(wú)法找到該字段。而且我們也會(huì )發(fā)現,無(wú)論我們在數據庫中存放的表是什么名字,在XML的顯示中一律依次用<Table />、<Table1 />來(lái)代替,我們僅僅知道在每個(gè)表中的字段名稱(chēng)而已。還有第3點(diǎn),在XML中所有的數據都是String類(lèi)型的,不管是數字還是時(shí)間。這又該怎么辦呢?
        當然,這就要歸功于XmlSchema的功勞了。我將會(huì )在明天將第2部分–“Schema的作用”寫(xiě)出來(lái)。
上面提到了幾個(gè)問(wèn)題:
    1、當在數據表中的某個(gè)字段為空值(即為null,而并非為”")時(shí),其根本不會(huì )顯示在XML上,這就造成了當需要對XML進(jìn)行數據綁定的時(shí)候,根本無(wú)法找到該字段。該如何解決?
    2、無(wú)論我們在數據庫中存放的表是什么名字,在XML的顯示中一律依次用<Table />、<Table1 />來(lái)代替,如何通過(guò)表名稱(chēng)來(lái)找呢?
    3、在XML中所有的數據都是String類(lèi)型的,不管是數字還是時(shí)間。如何讓Xml中的數據類(lèi)型與DataSet中的一樣?

    好,現在開(kāi)始講解Schema。我們可以通過(guò)DataSet.GetXmlSchema()來(lái)得到DataSet的Schema。當然,該方法還是用來(lái)生成String這符串的。我們首先來(lái)看一下它的格式。
    假如有如下表:
表Test,其字段描述如下:
ID(string) Name(string) time(DateTime)
1  aa  2004-5-1
2  bb  

其DataSet的Xml格式如下:
<?xml version=”1.0″ encoding=”utf-16″?>
<xs:schema id=”NewDataSet” xmlns=”" xmlns:xs=”
http://www.w3.org/2001/XMLSchema” xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata”>
  <xs:element name=”NewDataSet” msdata:IsDataSet=”true” msdata:Locale=”zh-CN”>
    <xs:complexType>
      <xs:choice maxOccurs=”unbounded”>
        <xs:element name=”test”>
          <xs:complexType>
            <xs:sequence>
              <xs:element name=”ID” type=”xs:string” minOccurs=”0″ />
              <xs:element name=”Name” type=”xs:string” minOccurs=”0″ />
              <xs:element name=”time” type=”xs:dateTime” minOccurs=”0″ />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

    至于Schema的寫(xiě)法,我就不多說(shuō)了,不清楚的朋友可以找一本Xml的基礎資料來(lái)看一下。這里我們重點(diǎn)要看紅色標注的一行,里屬性type就是用來(lái)表示在Xml中該字段的數據類(lèi)型。其它屬性還包含字段的限制等等。實(shí)際上,XmlSchema的作用就在于此。同時(shí),即便在Xml中字段為空時(shí)不顯示,通過(guò)XmlSchema也可以得到完整的數據字段。還有一點(diǎn),就是表名,你同時(shí)也可以看到在XmlSchema中有與Xml中對應的表名,這里看到的為test。
    好,講到這里,我想你已經(jīng)大概了解DataSet轉為Xml的一些基礎知識了。那么現在我再來(lái)講一下Xml還原成DataSet的方法。
    DataSet已經(jīng)很好的支持了Xml。這一點(diǎn)我在開(kāi)發(fā)過(guò)程中感受得非常深刻。DataSet通過(guò)客戶(hù)端是不能夠提取的,因此我先轉成Xml,然后通過(guò)客戶(hù)端的MSXML進(jìn)行DOM解析,真的是非常棒哦。有空你也可以試一下它的強大功能。
    Xml轉成DataSet主要用DataSet.ReadXmlSchema()和DataSet.ReadXml()方法。注意這里,我們通過(guò)DataSet獲取時(shí),如果要獲取Schame,那么寫(xiě)一定要先將DataSet.ReadXmlSchema()寫(xiě)在前面,因為DataSet只有首先得到數據架構,才能在架構中添加數據哦(想想建筑師們是怎么設計的吧)!

     如果XML數據是DiffGram,那么就用DiffGram格式推導數據。如果XML文檔包含內聯(lián)架構,那么這個(gè)架構就用于確定DataSet對象的子元素的結構。這種行為等于ReadSchema選項。如果沒(méi)有找到架構,那么就用InferXMLSchema方法從DataSet對象推導架構信息。如果載加載DataSet對象時(shí)設置一個(gè)明確的XmlReadMode方法,那么就可以改進(jìn)性能。

       在DataSet.GetXml()方法中,會(huì )有第二個(gè)參數是用來(lái)設置Get方法。里面最有作用的就是DiffGram參數。它可以完整保存DataSet中的信息。加入該參數,你再觀(guān)察一下DataSet生成的Xml,會(huì )發(fā)現從獲取DataSet到對DataSet的記錄操作變更全部都記錄在Xml中了,這就是DiffGram的功勞。這樣,即便我們把DataSet以Xml的方法傳遞到任何其它層,都可以進(jìn)行有效的更新或還原了。

DiffGram格式

        DiffGram是一種XML序列化格式,它包括每一行的原始值和當前值。特別地,它包含帶有原始值的行列表以及將所有更改組織在一起的最后一節。每一行都由一個(gè)為已標示符,用于兩節DiffGram之間跟蹤改變。下面的清單描述了DiffGram的結構,其中第一行被刪除,第三行被修改并且插入了一個(gè)新行:

<diffgr:diffgram>
 <DataSetName>
  <Employees diffgr:id=”Employees1″ msdata:rowOrder=”0″>…</Employees>
  <Employees diffgr:id=”Employees3″ msdata:rowOrder=”2″>…</Employees>
  <Employees diffgr:id=”Employees4″ msdata:rowOrder=”3″ diffgr:hasChanges=”modified”>…</Employees>
  <Employees diffgr:id=”Employees5″ msdata:rowOrder=”4″>…</Employees>
  <Employees diffgr:id=”Employees6″ msdata:rowOrder=”5″>…</Employees>
  <Employees diffgr:id=”Employees7″ msdata:rowOrder=”6″>…</Employees>
  <Employees diffgr:id=”Employees8″ msdata:rowOrder=”7″>…</Employees>
  <Employees diffgr:id=”Employees9″ msdata:rowOrder=”8″>…</Employees>
  <Employees diffgr:id=”Employees10″ msdata:rowOrder=”9″ diffgr:hasChanges=”inserted”>…</Employees>
 </DataSetName>
 <diffgr:before>
  <Employees diffgr:id=”Employees2″ msdata:rowOrder=”1″>…</Employees>
  <Employees diffgr:id=”Employees4″ msdata:rowOrder=”3″>…</Employees>
 </diffgr:before>
</diffgr:diffgram>

<diffgr:diffgram>根節點(diǎn)友兩個(gè)子節點(diǎn)。第一個(gè)是帶有其當前內容的DataSet對象,包括新添加的行和修改的行,但是不包括刪除的行。這種數據樹(shù)根據DataSet對象命名。用DataSetName屬性的到和設置DataSet對象名。第二個(gè)節點(diǎn)是以<diffgr:before>節點(diǎn)為根的樹(shù)。這個(gè)樹(shù)包含恢復DataSet對象原始狀態(tài)的足夠信息。例如,它仍然包含所有被刪除的行和所有被修改行的原始內容。受改變影響的所有列都在<diffgr:before>子樹(shù)種跟蹤。

標示行

diffgr:id屬性用于在當前行和原始行之間建立鏈接。diffgr:hasChanges屬性可以很快找到那些紀錄被刪除、插入或者只是修改。

你可以用另外兩個(gè)屬性來(lái)控制所保存的XML格式。第一個(gè)是DataColumn對象的ColumnMapping屬性,它可以指定WriteXml方法是否隱藏了列,是將列寫(xiě)成一個(gè)元素、一個(gè)屬性還是簡(jiǎn)單的文本。另一個(gè)你應該注意的屬性就是DataRelation對象的Nested屬性。當我們用WriteXml來(lái)寫(xiě)父子關(guān)系中子表里的記錄時(shí),該屬性可以指定這些記錄是否是嵌套在相關(guān)的父表記錄中的。

注意:在試圖從一個(gè)XML DiffGram創(chuàng )建DataSet對象時(shí),要保證目標DataSet對象有與所讀取得DataSet對象有同樣的架構。不能將DiffGram裝入一個(gè)空的新創(chuàng )建的DataSet對象。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
非.NET語(yǔ)言調用.NET XML Web Services返回的數據集合的兩個(gè)方法
小菜之智能客戶(hù)端(2)創(chuàng )建強類(lèi)型DataSet - a-peng - 博客園
從SQL內讀數據到XML
3.8.1 什么是LINQ
C#中將dataset轉換成xml格式的string型,以及將xml格式的string型轉換成dataset
BlogJava - eamoi之Coder日志 - 【原創(chuàng )】AJAX開(kāi)發(fā)簡(jiǎn)略續一
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久