2009-07-21 42 views
0

我是C#的新手,所以我很抱歉如果這是一個簡單的任務。我想要打開一個XML文件,其根節點是一個表名,而根節點的子節點是字段名和值。然後,我想將這些字段映射到SQL Server數據庫中的根節點的表中,並根據需要進行更新或插入。有沒有人知道是否有更好的方法來做這個比循環遍歷節點樹和構建SQL字符串?似乎應該有一種方法來綁定字段,就好像XML文檔是一種形式一樣,只有它纔會存在於內存中。再次,對不起,如果這個問題有一個明顯的答案。預先感謝您的幫助。將XML節點映射到數據表字段

回答

0

我使用OPENXML方法來解決這樣的任務。還有例如從BOL如何從XML選擇數據:

DECLARE @idoc int 
DECLARE @doc varchar(1000) 
SET @doc =' 
<ROOT> 
<Customer CustomerID="VINET" ContactName="Paul Henriot"> 
    <Order OrderID="10248" CustomerID="VINET" EmployeeID="5" 
      OrderDate="1996-07-04T00:00:00"> 
     <OrderDetail ProductID="11" Quantity="12"/> 
     <OrderDetail ProductID="42" Quantity="10"/> 
    </Order> 
</Customer> 
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez"> 
    <Order OrderID="10283" CustomerID="LILAS" EmployeeID="3" 
      OrderDate="1996-08-16T00:00:00"> 
     <OrderDetail ProductID="72" Quantity="3"/> 
    </Order> 
</Customer> 
</ROOT>' 
--Create an internal representation of the XML document. 
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc 
-- SELECT stmt using OPENXML rowset provider 
SELECT * 
FROM OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2) 
     WITH (OrderID  int   '../@OrderID', 
       CustomerID varchar(10) '../@CustomerID', 
       OrderDate datetime '../@OrderDate', 
       ProdID  int   '@ProductID', 
       Qty   int   '@Quantity') 

所以,你可以使用INSERT ... SELECT FROM OPENXML語句這個數據插入到數據庫。

0

最簡單的方法可能是爲您的xml類型創建一個簡單的實體類,並使用XML序列化屬性將您的xml元素映射到您的類及其屬性。然後,您可以使用標準的XmlSerializer將xml反序列化爲對象,或者將對象序列化爲xml。一旦你有了一個對象,應該很容易使用OR映射器(LINQ to SQL,Entity Framework,NHibernate)或類似iBatis的東西來執行你的實體類的更新/插入/刪除。