基于NET的XML與SQLServer數(shù)據(jù)交換方法
【技術(shù)領(lǐng)域】
[0001 ] 基于AD0NET的XML與SQLServer數(shù)據(jù)交換方法主要涉及計算機數(shù)據(jù)庫領(lǐng)域。
【背景技術(shù)】
[0002]XML是eXtenMble MarkupLanguage的縮寫,其全稱為“可擴展標(biāo)記語言”,它定義了一種文件格式,一種保存數(shù)據(jù)的方法,其自描述性非常適用于異構(gòu)數(shù)據(jù)庫系統(tǒng)之間的數(shù)據(jù)交換,而且這種交換不以預(yù)先規(guī)定的數(shù)據(jù)結(jié)構(gòu)定義為前提,具備很強的開放性。近年來,XML技術(shù)已經(jīng)廣泛應(yīng)用于電子商務(wù)、電子政務(wù)、網(wǎng)上教學(xué)等眾多領(lǐng)域。
[0003]SQL Server數(shù)據(jù)庫系統(tǒng)是當(dāng)今主流的數(shù)據(jù)庫系統(tǒng)之一,在SQL Server 2000中,引入了對XML的直接支持,在安裝SQL數(shù)據(jù)庫的時候,就已經(jīng)安裝了 MSXML語法分析器(Msxml2.dll),用來分析XML文檔,用戶通過瀏覽器以U R L訪問SQL Server 2000,并將查詢結(jié)果以XML格式返回瀏覽器中顯示出來,也可以通過0PENXML語句將XML格式的數(shù)據(jù)放入 SQL Server 2000 中。
[0004]
【發(fā)明內(nèi)容】
通過國家專利檢索沒有發(fā)現(xiàn)關(guān)于此系統(tǒng)方面的申請資料。
[0005]此方法是通過通過一個分層編程接口或?qū)嵱肁D0.NET有關(guān)的A P I訪問并更新同一數(shù)據(jù)片斷?;旧希梢詫⒁粋€DataSet對象轉(zhuǎn)換為XML D0M對象并將XML D0M子樹視為合并了 DataSet對象表中的一些表的集合。
[0006]SQL Server 2000是一個功能強大的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它新增了許多支持XM L的新特性,將S Q LServer 2000關(guān)系數(shù)據(jù)庫的查詢結(jié)果顯示成XML文檔是通過.NETDataProvider 直接使用 SqlCom.mand 的 ExecuteXmlReader 方法創(chuàng)建一個 XmlReader,在普通SELE CT語句中加上FOR XML子句來完成的,查詢結(jié)果存儲為XML文檔,而不是通常意義上的結(jié)果集。
[0007]在使用FOR XML子句的同時可以指定XML的MODE (RAW、AUTO、EXPLICIT)以及XML-DATA的模式(Schema),通過指定3種XML樣式RAW、AUTO、EXPLICIT之一,就可以返回具有一定樣式信息的數(shù)據(jù)。但是FOR XML也有它的局限性:〈a>在子查詢中不能使用FORXML ;<b>F0R XML不可以用于計算列。
[0008]以下我們可以使用SQL Server2000中新提供的FOR XML子句檢索SQL數(shù)據(jù)并生成XML文檔:
〈DRAW模式:獲得查詢結(jié)果并將結(jié)果集內(nèi)的各行轉(zhuǎn)換為xML元素,用一般標(biāo)識符〈row〉作為元素標(biāo)記。
[0009]SELECT C.CustomerlD, 0.0rderlD, 0.0rderDate FROM Customers C.0rders
0WHERE C.CustomerID=0.CustomerlD ORDER BY C.CustomerlD FOR XML RAW
下面是部分結(jié)果:
〈row CustomerID=”ALFKI’1 0rderID=” 10643”0rderDate=” 1 997—08—25T00:00:
001V>〈row CustomerID=”AR0UT”0rderID=’ 1 10355”0rderDate=”l 996-11-15T00:00:00,,/>
<2>AUT0模式:以簡單的嵌套XML樹返回查詢結(jié)果。在FROM子句內(nèi),每個在SELECT子句中至少有一列被列出的表都表示為一個XML元素,SELE CT子句中列出的列映射到適當(dāng)?shù)脑靥匦浴?br>[0010]SELECT C.CustomerlD,0.0rderlD, 0.0rderDate FROM Customers C.0rders0 WHERE C.CustomerID=0.CustomerlD ORDER BY C.CustomerlD FOR XML AUTO
下面是部分結(jié)果:
<C CustomerID=l1ALFKIv >
<0 0rderID=” 10643”
0rderDate=”l 997-08-25T00:00 001’ />
<3>EXPLICIT模式:這是最為復(fù)雜也是功能最為強大的一種模式。指定顯式定義所得到的XML樹的形狀,從而提供對返回結(jié)構(gòu)的全面控制。各個列(字段)都可以獨立的映射為屬性或手元素,使用此種模式,要求以一種特定的方式編寫查詢,以便顯示指定有關(guān)期望的嵌套的附加信息。
[0011]XML文檔保存到關(guān)系數(shù)據(jù)庫裹中;XML的主要用途之一就是作數(shù)據(jù)交換,將不同格式的數(shù)據(jù)轉(zhuǎn)換成XML文檔后,再轉(zhuǎn)換成其他的格式進行存儲或處理,因此可以將XML文檔轉(zhuǎn)換成SQL Server 2000的格式,把XML文檔保存在SQL Server 2000的表中。
[0012]在SQL Server 2000中,0PENXML語句提供了在關(guān)系數(shù)據(jù)庫表中存儲XML文檔的功能。SQL Server 2⑴0支持三種在數(shù)據(jù)庫中表示X M L的基本方法:
0PENXML、XML批量加載以及Updategram。0PENXML是一個T一SQL函數(shù),它負責(zé)插入用XML文檔表示的數(shù)據(jù),0PENXML解析XML文件的內(nèi)容并把它表示為行集,這樣,行集中的記錄就可以存儲在數(shù)據(jù)庫表中。XML批量加載(XML BulkLoad)是一個COM組件,SQL Server2000可以用它讀取XML文件中的數(shù)據(jù),并根據(jù)XDR或XSD模式將數(shù)據(jù)復(fù)制到數(shù)據(jù)庫的表和列中。和0PENXML不同,XML批量加載是經(jīng)過優(yōu)化可用于處理大量數(shù)據(jù)的。Updategram是一個XML文件,它包含必須輸入到一個或多個數(shù)據(jù)庫表中的更改信息。除了所作的更改之外,Updategram還包含可選的映射信息,以更好地關(guān)聯(lián)XML源中的元素和數(shù)據(jù)庫中的列。
[0013]下面以一個例子來說明如何用0PENXML取出XML文檔內(nèi)容,并以查詢數(shù)據(jù)表的方式顯示其內(nèi)容:
DE CLAREihdoc int
DECLAREidec varchar (4000)--建立一個記錄人員信息的XML文檔
SET@dec= ‘〈users〉
<user>
<userlD>l< / userlD>
<userName> 張三 < / userName>
</ user>
<user>
<userlD>2< / u §erlD>
<userName> 李四〈/ userName>
</ userX / users〉’ 一一使用0PENXML生成人員數(shù)據(jù)行集EXE C sp—xml—preparedocumentOhdoc OUTPUT, ?dec一一用XML文檔的人員數(shù)據(jù)行集作為SELE CT語句查詢的表格SELECT * FROM OPENXML(@hdoc,; / users / user,)ff I T H(人員編號i n t /userlD’,人員姓名 varchar (30)
/ userName’ )
一一處理完畢,釋放內(nèi)存空間EXEC sp_xml—removedocumentOhdoc
輸出結(jié)果如下:
人員編號人員姓名1張三2李四。
【主權(quán)項】
1.基于NET的XML與SQLServer數(shù)據(jù)交換方法通過一個分層編程接口或?qū)嵱肁D0.NET有關(guān)的A P I訪問并更新同一數(shù)據(jù)片斷。2.根據(jù)權(quán)利要求1則將SQ LServer 2000關(guān)系數(shù)據(jù)庫的查詢結(jié)果顯示成XML文檔是通過.NET DataProvider 直接使用 SqlCom.mand 的 ExecuteXmlReader 方法創(chuàng)建一個XmlReader,在普通SELE CT語句中加上FOR XML子句來完成的,查詢結(jié)果存儲為XML文檔。3.根據(jù)權(quán)利要求2用SQLServer2000中新提供的FOR XML子句檢索SQL數(shù)據(jù)并生成XML文檔主要是二種模式:RAW模式及aUTO模式。4.根據(jù)權(quán)利要求3中的RAW模式得查詢結(jié)果并將結(jié)果集內(nèi)的各行轉(zhuǎn)換為xML元素,用一般標(biāo)識符〈row〉作為元素標(biāo)記。5.根據(jù)權(quán)利要求3簡單的嵌套XML樹返回查詢結(jié)果;在FROM子句內(nèi),每個在SELECT子句中至少有一列被列出的表都表示為一個XML元素,SELE CT子句中列出的列映射到適當(dāng)?shù)脑靥匦浴?br>【專利摘要】基于NET的XML與SQLServer數(shù)據(jù)交換方法使用SELECT語句可以把查詢結(jié)果存儲為XML文檔,使用0PENxML語句提供了在關(guān)系數(shù)據(jù)庫表中存儲XML文檔的功能,并實際實現(xiàn)了SQLServer2000和XML之問的數(shù)據(jù)交換。
【IPC分類】G06F17/30
【公開號】CN105488080
【申請?zhí)枴緾N201410537083
【發(fā)明人】不公告發(fā)明人
【申請人】鎮(zhèn)江鼎拓科技信息有限公司
【公開日】2016年4月13日
【申請日】2014年10月13日