2009-07-21 9 views
0

저는 C#을 처음 사용하므로 간단한 작업 인 경우 사과드립니다. 내가하고 싶은 것은 루트 노드가 테이블 이름이고 루트 노드의 자식이 필드 이름과 값인 XML 파일을 엽니 다. 그런 다음 필드를 SQL Server 데이터베이스의 루트 노드 테이블에 매핑하고 필요에 따라 업데이트하거나 삽입하려고합니다. 누구든지 노드 트리를 통해 반복하고 SQL 문자열을 구축하는 것보다 더 우아한 방법이 있는지 알고 있습니까? XML 문서가 양식 인 것처럼 필드를 바인드하는 방법이 있어야하며 메모리에만 존재할 것만 같아 보입니다. 다시 말하지만,이 질문에 분명한 대답이 있으면 미안합니다. 모든 도움을 미리 감사드립니다.XML 테이블을 Datatable 필드에 매핑하십시오.

답변

0

이러한 작업을 해결하기 위해 OPENXML 방법을 사용합니다.

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') 

그래서, 당신은 DB에 데이터를 삽입 OPENXML 문에서 SELECT ... INSERT를 사용할 수 있습니다 : XML에서 데이터를 선택하는 방법 BOL에서 예제가있다.

0

가장 간단한 방법은 XML 형식에 대한 간단한 엔터티 클래스를 만들고 XML serialization 특성을 사용하여 xml 요소를 클래스와 해당 속성에 매핑하는 것입니다. 그런 다음 표준 XmlSerializer를 사용하여 xml을 개체에 deserialize하거나 xml에 개체를 serialize 할 수 있습니다. 개체가 있으면 엔티티 클래스로 업데이트/삽입/삭제를 수행하기 위해 OR 매퍼 (LINQ to SQL, Entity Framework, NHibernate) 또는 iBatis와 같은 것을 사용하는 것이 쉽습니다.

관련 문제