<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用.NET存儲XML數據的方法

        來源:懂視網 責編:小采 時間:2020-11-27 22:45:35
        文檔

        使用.NET存儲XML數據的方法

        使用.NET存儲XML數據的方法:SQL Server 2000和XML for SQL Server 2000 Web版本(SQLXML)提供了三種存儲XML數據的途徑:XML Bulk Load和Updategrams,這兩種客戶端技術使用帶有注解的大綱指定XML文檔內容和數據庫的表之間的映射;OpenXML是一種服務器端技術,它允許你在XML文
        推薦度:
        導讀使用.NET存儲XML數據的方法:SQL Server 2000和XML for SQL Server 2000 Web版本(SQLXML)提供了三種存儲XML數據的途徑:XML Bulk Load和Updategrams,這兩種客戶端技術使用帶有注解的大綱指定XML文檔內容和數據庫的表之間的映射;OpenXML是一種服務器端技術,它允許你在XML文

        SQL Server 2000和XML for SQL Server 2000 Web版本(SQLXML)提供了三種存儲XML數據的途徑:XML Bulk Load和Updategrams,這兩種客戶端技術使用帶有注解的大綱指定XML文檔內容和數據庫的表之間的映射;OpenXML是一種服務器端技術,它允許你在XML文檔上定義關系視圖,有了OpenXML的關系視圖,你就能使用T-SQL代碼查詢XML文檔中的數據并把結果存儲在你的SQL Server數據庫中。 
          這三種技術中的每一種都是為特定的目的設計的。XML Bulk Load把來自很大的XML文檔的數據存儲在SQL Server中;Updategrams執行SQL Server數據的優化更新(優化更新是沒有鎖(lock)的更新,在這種更新中系統檢測是否有其它用戶在原來讀取數據后改變了它);OpenXML提供了人們熟悉的XML數據關系訪問方法。 

          在這三種技術中,OpenXML是最靈活的,因為它提供了一個編程模型(T-SQL),在把XML數據存儲在SQL Server數據庫之前,你可以使用這種編程模型在XML數據上編寫業務規則或執行計算邏輯。但是,由于OpenXML是一種基于服務器的技術,如果你頻繁的使用它或者有大量的文檔,它會降低SQL Server的性能。不過,如果你采用了微軟.net框架組件,你就可以使用ADO.NET的數據集繞開這些性能和可伸縮性方面的限制,ADO.NET數據集賦予你一個強大的技術--為把XML數據存儲在SQL Server包含了一個完整的編程模型。 

          數據集、數據表和XML映射 

          你可以使用數據集簡單地從SQL Server中生成XML查詢結果。通過提供一種可以在客戶端和中間層計算機上使用的關系數據緩存(cache),數據集能夠載入和維護多種數據源(包括SQL Server、其它的關系型數據庫和XML)中的數據。 

          當你從XML文檔中載入一個數據集的時候,該數據集必須把存儲在層次XML表現(representation)中的數據映射成數據集的關系表現。例如,如果你的XML文檔包含一個Order元素列表,而它又有一個作為子元素的嵌套的LineItem元素,那么通常這個文檔被映射成關系表現中的Orders和LineItems數據表。這種映射的目的與OpenXML使用Xpath查詢構造XML文檔上的關系視圖的方法的目的是一樣的。但是與使用Xpath規范不同,數據集有自己的映射數據的方式。 

          數據集使用XML大綱定義(XSD)大綱把數據從XML文檔映射到數據集的關系數據緩存中。數據集為你提供了指定映射XML數據的大綱的兩種方法。首先,你可以引用一個定義了XML文檔中使用的元素,屬性和關系的XSD大綱。另一種方法是,你可以直接從文檔的結構中推理大綱。換句話說,數據集可以通過檢查XML文檔的結構和內容建立大綱。 

          當你引用XSD大綱的時候,數據集使用這個大綱中定義的元素、屬性與元素之間的關系來構造關系數據緩存中的數據表、數據列和數據關系,你可以使用這個數據緩存存儲被映射的XML數據。我談到關系數據緩存中的結構或大綱的時候,一般把它稱為數據緩存的形式。當數據集處理大綱的時候,它會應用一組規則,這種規則與映射大綱中沒有指定注解時Updategrams 和XML Bulk Load使用的默認映射規則相似,數據集使用這種規則建立數據集用于存儲被映射的XML數據的表。數據集的映射規則概述如下: 

          · 復合元素--即包含其它元素或屬性的元素--被映射成表。 

          · 屬性和簡單值(simple-valued)子元素--只包含數據,不包含其它元素或屬性的元素--被映射成列。 

          · 數據類型從XSD類型映射為.NET類型。  

          推理(Inference)是一種快速、方便的把XML文檔載入數據集的方法。表、列和關系都是"自我測量"(introspection)自動建立的,"自我測量"是數據集檢查XML文檔的結構和內容的過程。盡管使用推理明顯減少了你的編程負擔,但是它也給你的實現帶來了不可預測性,因為對XML文檔的很小的改動可能引起數據集建立不同形式的表。這些形式的改變可能引起你的應用程序意外中斷。因此,我推薦你一般為應用程序引用一個大綱,建立原型的時候限制推理的使用。 

          現在讓我們看一看如何使用大綱建立一個可用于更新SQL Server數據庫的客戶端數據集數據緩存的例子。

        映射XML訂單 

          假定你在編寫一個接受用戶訂單的應用程序,訂單是XML格式的,它的XSD大綱如圖1定義。該大綱定義了三種復合類型,分別提供訂單的客戶數據、訂單數據和線性數據項。一個頂層Customer元素定義了XML文檔的根。這個封閉的系統定義了元素之間的關系:Order元素包含了一個LineItem元素,Customer元素包含一個Order元素。圖2顯示了符合圖1定義的大綱的一個XML文檔實例。 

          圖1:XSD大綱 

        <?xml version="1.0" encoding="utf-8"?> 
        <xs:schema targetNamespace="urn:Sep2003Example" elementFormDefault="qualified" 
        xmlns="urn:Sep2003Example" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
         <xs:complexType name="OrderType"> 
         <xs:sequence> 
          <xs:element name="OrderID" type="xs:integer" /> 
          <xs:element name="LineItem" type="LineItemType" /> 
         </xs:sequence> 
        </xs:complexType> 
        <xs:complexType name="LineItemType"> 
         <xs:sequence> 
          <xs:element name="ProductID" type="xs:int" /> 
          <xs:element name="Quantity" type="xs:int" /> 
          <xs:element name="UnitPrice" type="xs:decimal" /> 
         </xs:sequence> 
        </xs:complexType> 
        <xs:complexType name="CustomerType"> 
         <xs:sequence> 
          <xs:element name="CustomerID" type="xs:string" /> 
          <xs:element name="Order" type="OrderType" /> 
         </xs:sequence> 
        </xs:complexType> 
        <xs:element name="Customer" type="CustomerType"> 
        </xs:element> 
        </xs:schema> 

          圖2:一個XML文檔示例 

        <?xml version="1.0" ?> 
         <Customer xmlns="urn:Sep2003Example"> 
          <CustomerID>ALFKI</CustomerID> 
          <PO>9572658</PO> 
          <Address> 
          <Street>One Main Street</Street> 
          <City>Anywhere</City> 
          <State>NJ</State> 
          <Zip>08080</Zip> </Address> 
          <Order> 
           <OrderID>10966</OrderID> 
           <LineItem> 
            <ProductID>37</ProductID> 
            <UnitPrice>26.50</UnitPrice> 
            <Quantity>8</Quantity> 
            <Description>Gravad lax</Description> 
           </LineItem> 
           <LineItem> 
            <ProductID>56</ProductID> 
            <UnitPrice>38.00</UnitPrice> 
            <Quantity>12</Quantity> 
            <Description>Gnocchi di nonna Alice</Description> 
           </LineItem> 
          </Order> 
         </Customer> 

          列表1中顯示的C#代碼使用ReadXmlSchema方法把圖1中的大綱載入一個叫作orderDS的數據集中。ReadXmlSchema建立了三個數據表,它們分別與大綱中定義的Customer、Order和LineItem元素對應。因此你可以驗證這個大綱在關系數據緩存中建立了預期的表,printDSShape方法把每個表的名稱寫到控制臺上,后面跟著列的列表和每列的數據類型。 

          列表1: 建立關系數據緩存的C#代碼 

        using System; 
        using System.Collections; 
        using System.Data; 
        using System.Data.SqlClient; 
        using System.Xml; 

        public class XMLMap 

        public static void Main() 

        // 建立數據集和讀取大綱 
        DataSet orderDS = new DataSet("CustOrder"); 
        orderDS.ReadXmlSchema("CustOrderLitem.xsd"); 

        // 打印數據集的形式 
        printDSShape(orderDS); 

        // 把一個XML格式的訂單讀入數據集 
        orderDS.ReadXml("Order.xml",System.Data.XmlReadMode.IgnoreSchema); 

        // 打印數據集中的數據 
        printDSData(orderDS); 

        // 此處插入業務規則和數據庫更新邏輯 

        private static void printDSShape(DataSet ds) 

        foreach (DataTable dt in ds.Tables) 

        Console.WriteLine("{0}",dt.TableName); 

        // 打印列的名稱和類型 
        foreach (DataColumn dc in dt.Columns) 
        Console.WriteLine("\t{0}\t{1}",dc.ColumnName,dc.DataType.ToString()); 

        private static void printDSData(DataSet ds) 

        foreach (DataTable dt in ds.Tables) 

        Console.WriteLine("\n{0}:", dt.TableName); 

        // 打印列的頭 
        foreach (DataColumn dc in dt.Columns) 
        Console.Write("{0}\t",dc.ColumnName); 
        Console.WriteLine(""); 

        // 輸出數據 
        foreach (DataRow dr in dt.Rows) 

        foreach(DataColumn dc in dt.Columns) 
        System.Console.Write("{0}\t",dr[dc]); 
        System.Console.WriteLine(""); 



          仔細查看一下列的名稱。盡管大綱中沒有指定Customer_Id和Order_Id列,但是它們還是出現在數據表中。ReadXmlSchema給數據集自動添加這些列。數據集把這些列用作外部鍵(foreign key),以模擬Customer元素與它的Order元素之間、Order元素與它的LineItem元素之間的關系。因為典型情況下XML使用嵌套的關系代替了外部鍵,所以數據集自動生成自己的主鍵、數據表之間的外部鍵,并把它們存儲在這些列中。 

          請同時仔細查看圖3中的數據類型--數據集已經把來自XML大綱數據類型的數據類型映射為對應的.net數據類型。當你把XML文檔載入數據集的時候,該數據集把來自XML的每一個值轉換為對應的.NET類型。 

        圖3:生成的數據類型和記錄 

        Customer 
        CustomerID System.String 
        Customer_Id System.Int32 

        order 
        orderID System.Int64 
        order_Id System.Int32 
        Customer_Id System.Int32 

        LineItem 
        ProductID System.Int32 
        Quantity System.Int32 
        UnitPrice System.Decimal 
        order_Id System.Int32 

        Customer: 
        CustomerID Customer_Id 
        ALFKI 0 

        order: 
        orderID order_Id Customer_Id 
        10966 0 0 

        LineItem: 
        ProductID Quantity UnitPrice order_Id 
        37 8 26.5 0 
        56 12 38 0 

          把大綱載入數據集之后,為了完成關系映射,你需要做的所有事情就是把XML數據載入該數據集。列表1的ReadXml方法打開叫作Order.xml的文件,該文件如圖2所示。接著,它把文件中的數據讀取到你剛才讀取大綱建立的數據集中的數據表里。你的XML訂單現在可以通過數據集訪問了。 

          為了演示如何訪問數據集中的數據,列表1的printDSData方法在數據表中導航,對于每張表,都顯示列的名稱,緊接著顯示這張表的所有的行。圖3顯示為ReadXmlSchema方法給數據集添加的Customer_Id和Order_Id列自動生成了值。 

          請注意,Order.xml出現的三個元素--PO、Address和Description--沒有映射到數據表中。這些數據被忽略了,因為你提供給數據集的大綱沒有包含這些元素,當數據集建立關系數據緩存的外形并載入XML數據的時候,它簡單地忽略了沒有在大綱中描述的數據。即使在你從客戶那兒接收到的XML訂單中包含了沒有預料到的額外數據,這種簡便特性也可以讓你的代碼正常地工作。 

          建立使用數據緩存的應用程序 

          現在你已經知道如何使用數據集為XML數據建立關系數據緩存了,你可以應用這種技術來實現一個執行業務邏輯并更新SQL Server的應用程序。當你使用數據集編程模型的時候實現業務邏輯相對直接。ADO.NET為你提供了更新SQL Server中數據的幾種選擇,包括使用數據適配器、編寫自己的查詢,以及執行存儲過程。數據集使把XML數據映射成關系模型很容易,剩余的事情是你的了。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用.NET存儲XML數據的方法

        使用.NET存儲XML數據的方法:SQL Server 2000和XML for SQL Server 2000 Web版本(SQLXML)提供了三種存儲XML數據的途徑:XML Bulk Load和Updategrams,這兩種客戶端技術使用帶有注解的大綱指定XML文檔內容和數據庫的表之間的映射;OpenXML是一種服務器端技術,它允許你在XML文
        推薦度:
        標簽: 保存 方法 使用
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久久久久久尹人综合网亚洲| 成年女人18级毛片毛片免费| 亚洲国产激情一区二区三区| 中文字幕无码一区二区免费| 免费又黄又硬又爽大片| 亚洲AV无码一区二区三区网址 | 亚洲精品无码av中文字幕| 精品成人一区二区三区免费视频| 免费一本色道久久一区| 亚洲天堂2017无码中文| 思思99re66在线精品免费观看| 亚洲中文无码卡通动漫野外 | 免费人成在线观看视频播放| 亚洲a∨无码一区二区| 免费在线一级毛片| 国产黄片不卡免费| 亚洲av永久无码精品网站| 3d成人免费动漫在线观看| 亚洲国产中文v高清在线观看| 色妞www精品视频免费看| 亚洲精品成人久久久| 久久精品成人免费网站| 亚洲毛片基地日韩毛片基地 | 亚洲?v无码国产在丝袜线观看| 国产美女视频免费观看的网站| 亚洲综合一区二区精品导航| 日韩在线观看免费| 国产亚洲人成无码网在线观看| 色欲A∨无码蜜臀AV免费播| 亚洲宅男天堂a在线| 99爱视频99爱在线观看免费| 亚洲av无码片在线观看| xvideos亚洲永久网址| 久久免费观看国产99精品| 香蕉大伊亚洲人在线观看| 永久免费的网站在线观看| 深夜A级毛片视频免费| 久久精品国产精品亚洲蜜月| 最近2019中文字幕免费看最新| 一级女性全黄生活片免费看| 亚洲一区二区影院|