Aracılığıyla paylaş


XML'den DataSet Şema Bilgilerini Yükleme

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

Uyarı

XSD yapıları (iç içe ilişkiler gibi) kullanılarak bellek içinde oluşturulmuş bir DataSet öğeyi aktarmak için Web hizmetlerini veya XML serileştirmesini kullandığınızda DataSet tablo sıralamaları korunamayabilir. Bu nedenle, DataSet alıcısı bu durumda tablo sıralamasına bağlı olmamalıdır. Ancak DataSet aktarılmakta olan şema bellek içinde oluşturulmak yerine XSD dosyalarından okunduysa tablo sıralaması her zaman korunur.

ReadXmlSchema

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

ReadXmlSchema yöntemi, bir dosya adı, akış veya yüklenecek XML belgesini içeren bir XmlReader tek bir bağımsız değişkeni 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.

'a ReadXmlSchema geçirilen XML belgesi satır içi şema bilgisi içermiyorsa, ReadXmlSchema XML belgesindeki öğelerden şema çıkarılır. DataSet zaten bir şema içeriyorsa, mevcut şema, yeni tablolar eklenip genişletilecektir. Varolan tablolara yeni sütunlar eklenmez. Eklenen bir sütun DataSet içinde zaten varsa veya XML'de bulunan sütunla uyumsuz bir türe sahipse, bir istisna fırlatılır. XML belgesinden şema çıkarması hakkında ReadXmlSchema ayrıntılı bilgi için bkz. XML'den DataSet İlişkisel Yapısını Çıkarsama.

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

Aşağıdaki kod örnekleri bir XML belgesinden veya akışından şema yükleme DataSet işlemini 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

Ayrıca, DataSet bir XML belgesinden şemasını çıkarması için DataSet nesnesinin InferXmlSchema yöntemini kullanabilirsiniz. InferXmlSchema, hem ReadXml hem de XmlReadMode ile InferSchema aynı işlevi görür (verileri yükler ve şemayı çıkarsar) ve eğer okunan belge satır içi şema içermiyorsa ReadXmlSchema kullanılır. Ancak, InferXmlSchema size şema çıkartılırken göz ardı edilecek belirli XML ad alanlarını belirtme olanağı tanıyan ek bir özellik sunar. 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 bir 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 ReadXml yöntemi, XmlReadModeInferSchema ile birlikte belgedeki her öğe için tablolar oluşturur: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel ve Discontinued. (Daha fazla bilgi için bkz. XML'den DataSet İlişkisel Yapısını Çıkarsama.) Ancak, daha uygun bir yapı yalnızca ve Categories tablolarını Products oluşturmak ve ardından tabloda CategoryID, CategoryName ve Description sütunlarıCategories, tabloda productid, reorderLevel ve Discontinued sütunlar Products oluşturmaktır. Çıkarsanan şemanın XML öğelerinde belirtilen öznitelikleri yoksaydığından emin olmak için InferXmlSchema yöntemini kullanın officedata ve aşağıdaki örnekte gösterildiği gibi 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 bakınız