2013-03-12 2 views
1

SQL Server 및 VB.NET을 사용하고 있습니다. 내 SQL에서 다음을 사용하고 있습니다 :.NET에서 XML 스키마 및 데이터 읽기

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

tablename에 대한 스키마를 얻으려면. 그럼 내가 사용하고

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