테이블, 열, 관계 및 제약 조건)의 DataSet 스키마는 프로그래밍 방식으로 정의하거나, Fill 또는 FillSchema 메서드를 DataAdapter통해 만들거나, XML 문서에서 로드할 수 있습니다. XML 문서에서 DataSet 스키마 정보를 로드하려면 DataSet의 ReadXmlSchema 또는 InferXmlSchema 메서드를 사용할 수 있습니다. ReadXmlSchema 를 사용하면 XSD(XML 스키마 정의 언어) 스키마가 포함된 문서 또는 인라인 XML 스키마가 있는 XML 문서에서 DataSet 스키마 정보를 로드하거나 유추할 수 있습니다. InferXmlSchema 를 사용하면 지정한 특정 XML 네임스페이스를 무시하면서 XML 문서에서 스키마를 유추할 수 있습니다.
비고
웹 서비스 또는 XML serialization을 사용하여 XSD 구문(예: 중첩된 관계)을 사용하여 메모리 내 데이터 세트를 전송할 때 데이터 세트의 테이블 순서가 유지되지 않을 수 있습니다. 따라서 DataSet 의 수신자는 이 경우 테이블 순서에 의존해서는 안 됩니다. 그러나 전송 중인 DataSet 의 스키마를 메모리 내에서 만드는 대신 XSD 파일에서 읽은 경우 테이블 순서는 항상 유지됩니다.
ReadXmlSchema
데이터를 로드하지 않고 XML 문서에서 DataSet의 스키마를 로드하려면 DataSet의 ReadXmlSchema 메서드를 사용할 수 있습니다. ReadXmlSchema 는 XSD(XML 스키마 정의 언어) 스키마를 사용하여 정의된 DataSet 스키마를 만듭니다.
ReadXmlSchema 메서드는 로드할 XML 문서를 포함하는 파일 이름, 스트림 또는 XmlReader의 단일 인수를 사용합니다. XML 문서에는 스키마만 포함하거나 데이터를 포함하는 XML 요소와 인라인으로 스키마를 포함할 수 있습니다. 인라인 스키마를 XML 스키마로 작성하는 방법에 대한 자세한 내용은 XSD(XML 스키마) 데이터 세트 관계형 구조를 참조하세요.
ReadXmlSchema에 전달된 XML 문서에 인라인 스키마 정보가 없는 경우 ReadXmlSchema는 XML 문서의 요소에서 스키마를 유추합니다. DataSet에 스키마가 이미 포함되어 있는 경우 새 테이블이 아직 없는 경우 새 테이블을 추가하여 현재 스키마가 확장됩니다. 새 열은 기존 테이블에 추가되지 않습니다. 추가되는 열이 이미 DataSet 에 있지만 XML에 있는 열과 호환되지 않는 형식이 있는 경우 예외가 throw됩니다. ReadXmlSchema에서 XML 문서를 통해 스키마를 유추하는 방법에 대한 자세한 내용은 XML에서 데이터 세트 관계형 구조 유추를 참조하세요.
ReadXmlSchema는 DataSet의 스키마만 로드하거나 유추하지만 DataSet의 ReadXml 메서드는 XML 문서에 포함된 스키마와 데이터를 모두 로드하거나 유추합니다. 자세한 내용은 XML에서 데이터 세트 로드를 참조하세요.
다음 코드 예제에서는 XML 문서 또는 스트림에서 DataSet 스키마를 로드하는 방법을 보여 줍니다. 첫 번째 예제에서는 ReadXmlSchema 메서드에 전달되는 XML 스키마 파일 이름을 보여줍니다. 두 번째 예제에서는 System.IO.StreamReader를 보여줍니다.
Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema("schema.xsd")
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema("schema.xsd");
Dim xmlStream As New System.IO.StreamReader("schema.xsd")
Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema(xmlStream)
xmlStream.Close()
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema(xmlStream);
xmlStream.Close();
InferXmlSchema
DataSet의 InferXmlSchema 메서드를 사용하여 XML 문서에서 해당 스키마를 유추하도록 DataSet에 지시할 수도 있습니다. InferXmlSchema 함수는 InferSchema의 XmlReadMode를 사용하는 ReadXml(데이터를 로드하고 스키마를 유추함) 읽기 중인 문서에 인라인 스키마가 없는 경우 ReadXmlSchema와 동일하게 작동합니다. 그러나 InferXmlSchema 는 스키마를 유추할 때 무시할 특정 XML 네임스페이스를 지정할 수 있는 추가 기능을 제공합니다. InferXmlSchema 는 파일 이름, 스트림 또는 XmlReader로 지정된 XML 문서의 위치라는 두 가지 필수 인수를 사용합니다. 작업에서 무시할 XML 네임스페이스의 문자열 배열입니다.
예를 들어 다음 XML을 고려합니다.
<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">
<Categories>
<CategoryID od:adotype="3">1</CategoryID>
<CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName>
<Description od:adotype="203">Soft drinks and teas</Description>
</Categories>
<Products>
<ProductID od:adotype="20">1</ProductID>
<ReorderLevel od:adotype="3">10</ReorderLevel>
<Discontinued od:adotype="11">0</Discontinued>
</Products>
</NewDataSet>
이전 XML 문서의 요소에 지정된 특성 때문에 InferSchema의 XmlReadMode를 사용하는 ReadXmlSchema 메서드와 ReadXml 메서드는 모두 문서의 모든 요소에 대한 테이블을 만듭니다. Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel 및 Discontinued. (자세한 내용은 XML에서 DataSet 관계형 구조 유추를 참조하세요.) 그러나 더 적절한 구조는 범주 및 제품 테이블만 만든 다음 범주 테이블에CategoryID, CategoryName 및 Description 열을 만들고 ProductS 테이블에서 ProductID, ReorderLevel 및 Discontinued 열을 만드는 것입니다. 유추된 스키마가 XML 요소에 지정된 특성을 무시하도록 하려면 다음 예제와 같이 InferXmlSchema 메서드를 사용하고 officedata 의 XML 네임스페이스를 무시하도록 지정합니다.
Dim dataSet As DataSet = New DataSet
dataSet.InferXmlSchema("input_od.xml", New String() {"urn:schemas-microsoft-com:officedata"})
DataSet dataSet = new DataSet();
dataSet.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");