2013-03-12 10 views
1

我正在使用SQL Server和VB.NET。在我的SQL我使用以下內容:在.NET中讀取XML架構和數據

select top 1 * from tablename where 1=0 for xml auto, type, xmlschema 

獲取表名模式。然後我用

select * from tablename where ID=1 for xml, auto, type, elements xsinil, root('xml') 

得到我感興趣的數據行。

如果我使用在VB以下代碼:

Private ds as New Dataset 

ds.ReadXMLSchema("xmlschema.txt") 

我結束了含有一個表具有正確定義的一組列

的DS如果我然後嘗試:

ds.ReadXML("xmldata.txt") 

代碼成功,但我的數據集表中沒有任何行。

我的問題是,我需要做什麼才能將SQL Server創建的xml數據讀入SQL Server指定的模式的數據表中。

回答

0
  1. 您需要在第二個(數據)查詢以及第一個(模式)查詢中包含XMLSchema子句。如果你不這樣做,那麼數據輸出將會缺少一個名稱空間,因此不符合該模式。

  2. 您需要通過限定XMLSchema指令(例如XMLSchema('http://tempuri.org'))爲模式指定目標名稱空間。如果你不這樣做,那麼SQL Server將在每個查詢中爲你生成一個名稱空間,並且它們可能不匹配。

  3. 您需要確保兩個查詢的列列表和FOR XML子句完全相同。在您的示例中,您在數據查詢中指定了xsinil,但在模式查詢中沒有。

所以在這裏你需要指定像這樣的架構查詢

select top 1 * from tablename 
where 1=0 
for xml auto, type, elements xsinil, root('xml'), xmlschema('http://tempuri.org') 

這對於數據查詢

select * from tablename 
for xml auto, type, elements xsinil, root('xml'), xmlSchema('http://tempuri.org')