Aracılığıyla paylaş


XML’den DataSet Schema Bilgilerini Yükleme

Bir DataSet şema (tabloları, sütunları, ilişkileri ve kısıtlamaları) program aracılığıyla tanımlanabilir, bir öğesinin Fill veya FillSchema yöntemleri tarafından oluşturulabilir veya xml DataAdapterbelgesinden yüklenebilir. DataSet şema bilgilerini bir XML belgesinden yüklemek için, DataSet'in ReadXmlSchema veya InferXmlSchema yöntemini kullanabilirsiniz. ReadXmlSchema, XML Şema tanım dili (XSD) şemasını içeren belgeden veya satır içi XML Şemasına sahip bir XML belgesinden DataSet şema bilgilerini yüklemenize veya çıkarmanıza olanak tanır. InferXmlSchema , belirttiğiniz belirli XML ad alanlarını yoksayarak XML belgesinden şemayı çıkarsamanıza olanak tanır.

Not

XSD yapıları (iç içe ilişkiler gibi) kullanılarak bellek içinde oluşturulmuş bir DataSet'i aktarmak için Web hizmetlerini veya XML serileştirmesini kullandığınızda DataSet'teki tablo sıralama korunamayabilir. Bu nedenle, DataSet'in alıcısı bu durumda tablo sıralamaya bağımlı olmamalıdır. Ancak aktarılan DataSet şeması bellek içinde oluşturulmak yerine XSD dosyalarından okunduysa tablo sıralama her zaman korunur.

Readxmlschema

Veri yüklemeden bir XML belgesinden DataSet şemasını yüklemek için DataSet'in ReadXmlSchema yöntemini kullanabilirsiniz. ReadXmlSchema, XML Şema tanım dili (XSD) şeması kullanılarak tanımlanan DataSet şemasını oluşturur.

ReadXmlSchema yöntemi, yüklenecek XML belgesini içeren bir dosya adı, akış veya XmlReader'ın tek bir bağımsız değişkenini alır. XML belgesi yalnızca şema içerebilir veya veri içeren XML öğeleriyle birlikte şema satır içi içerebilir. Xml Şeması olarak satır içi şema yazma hakkında ayrıntılı bilgi için bkz . XML Şemasından (XSD) DataSet İlişkisel Yapısını Türetme.

ReadXmlSchema'ya geçirilen XML belgesi satır içi şema bilgisi içermiyorsa, ReadXmlSchema xml belgesindeki öğelerden şemayı çıkaracaktır. DataSet zaten bir şema içeriyorsa, mevcut olmayan yeni tablolar eklenerek geçerli şema genişletilecektir. Varolan tablolara yeni sütunlar eklenmez. Eklenen bir sütun DataSet'te zaten varsa ancak XML'de bulunan sütunla uyumsuz bir türe sahipse, bir özel durum oluşturulur. ReadXmlSchema'nın bir XML belgesinden şemayı nasıl çıkarmasıyla ilgili ayrıntılar için bkz. XML'den DataSet İlişkisel Yapısını Çıkarsama.

ReadXmlSchema yalnızca DataSet şemasını yüklese veya çıkarsa da, DataSet'in ReadXml yöntemi hem şemayı hem de XML belgesindeki verileri yükler veya çıkartır. Daha fazla bilgi için bkz . XML'den DataSet Yükleme.

Aşağıdaki kod örnekleri bir XML belgesinden veya akışından DataSet şemasının nasıl yükleneceklerini gösterir. İlk örnekte ReadXmlSchema yöntemine geçirilen bir XML Şeması dosya adı gösterilmektedir. İkinci örnekte System.IO.StreamReader gösterilmektedir.

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'in InferXmlSchema yöntemini kullanarak DataSet'e bir XML belgesinden şemasını çıkarmasını da sağlayabilirsiniz. InferXmlSchema, Hem InferSchema XmlReadModeile ReadXml (verileri hem de çıkarım şemasını yükler) ve okunan belge satır içi şema içermiyorsa ReadXmlSchema ile aynı işlevi görür. Ancak InferXmlSchema, şema çıkarıldığında yoksayılacak belirli XML ad alanlarını belirtmenize olanak sağlayan ek bir özellik sağlar. InferXmlSchema iki gerekli bağımsız değişken alır: XML belgesinin dosya adı, akış veya XmlReader ile belirtilen konumu ve işlem tarafından yoksayılacak XML ad alanlarının dize dizisi.

Örneğin, aşağıdaki XML'yi göz önünde bulundurun:

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

Önceki XML belgesindeki öğeler için belirtilen öznitelikler nedeniyle, hem ReadXmlSchema yöntemi hem de InferSchema XmlReadMode içeren ReadXml yöntemi, belgedeki her öğe için tablolar oluşturabilir: Kategoriler, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel ve Sonlandırılmış. (Daha fazla bilgi için bkz.XML'den DataSet İlişkisel Yapısı Çıkarılıyor.) Ancak, daha uygun bir yapı yalnızca Kategoriler ve Ürünler tablolarını oluşturmak ve ardından Kategoriler tablosunda CategoryID, CategoryName ve Description sütunları ve Ürünler tablosunda ProductID, ReorderLevel ve Sonlandırılmış sütunlar oluşturmaktır. Çıkarsanan şemanın XML öğelerinde belirtilen öznitelikleri yoksaydığından emin olmak için, Aşağıdaki örnekte gösterildiği gibi InferXmlSchema yöntemini kullanın ve officedata için yoksayılacak XML ad alanını belirtin.

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");  

Ayrıca bkz.