Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ADO.NET DataSet içeriği bir XML akışından veya belgeden oluşturulabilir. Buna ek olarak, .NET Framework ile XML'den hangi bilgilerin yüklendiği ve şemasının veya ilişkisel yapısının DataSet nasıl oluşturulduğu konusunda büyük bir esnekliğe sahip olursunuz.
DataSet'yi XML verileriyle doldurmak için, DataSet nesnesinin ReadXml yöntemini kullanın.
ReadXml yöntemi bir dosyadan, akıştan veya XmlReader'dan okur ve XML kaynağını ve isteğe bağlı bir XmlReadMode bağımsız değişkeni bağımsız değişken olarak alır. XmlReader hakkında daha fazla bilgi için bkz. XmlTextReader ile XML Verilerini Okuma. yöntemi XML ReadXml akışının veya belgesinin içeriğini okur ve DataSet verilerle yükler. Ayrıca DataSet ile ilişkili belirtilen XmlReadMode öğesinin ilişkisel şemasını da, mevcut olup olmadığına bağlı olarak oluşturur.
Aşağıdaki tabloda XmlReadMode bağımsız değişkeni için seçenekler açıklanmaktadır.
| Seçenek | Açıklama |
|---|---|
| Otomatik | Bu varsayılan seçenektir. XML'yi inceler ve aşağıdaki sırayla en uygun seçeneği belirler: - XML bir DiffGram ise, DiffGram kullanılır.- DataSet bir şema içeriyorsa veya XML satır içi bir şema içeriyorsa, ReadSchema kullanılır.Eğer DataSet bir şema içermiyorsa ve XML satır içi şema içermiyorsa, InferSchema kullanılır.Okunmakta olan XML biçimini biliyorsanız, en iyi performans için varsayılanı kabul etmek yerine açık bir Auto ayarlamanız önerilir. |
| ReadSchema | Tüm satır içi şemaları okur ve verileri ve şemayı yükler. DataSet zaten bir şema içeriyorsa, satır içi şemadan içindeki DataSetmevcut şemaya yeni tablolar eklenir. Satır içi şemadaki herhangi bir tablo içinde DataSetzaten varsa, bir özel durum oluşturulur. XmlReadMode.ReadSchema kullanarak varolan bir tablonun şemasını değiştiremezsiniz. DataSet bir şema içermiyorsa ve satır içi şema yoksa, hiçbir veri okunmuyordur. Satır içi şema, XML Şema tanım dili (XSD) şeması kullanılarak tanımlanabilir. 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. |
| ŞemayıYoksay | Tüm satır içi şemaları yoksayar ve verileri mevcut DataSet şemaya yükler. Mevcut şemayla eşleşmeyen tüm veriler atılır. içinde DataSetşema yoksa, hiçbir veri yüklenmez. Veriler bir DiffGram ise, IgnoreSchema ile aynı işlevselliğe DiffGram sahiptir. |
| InferSchema | Tüm satır içi şemaları yoksayar ve XML verilerinin yapısına göre şemayı çıkarsar, ardından verileri yükler. DataSet Zaten bir şema içeriyorsa, mevcut tablolara sütun eklenerek geçerli şema genişletilir. Mevcut tablo yoksa ek tablolar eklenmez. Çıkarılmış bir tablo farklı bir ad alanına sahipse veya çıkarılmış sütunlar mevcut sütunlarla çakışıyorsa bir özel durum oluşturulur. XML belgesinden şema çıkarması hakkında ReadXmlSchema ayrıntılı bilgi için bkz. XML'den DataSet İlişkisel Yapısını Çıkarsama. |
| DiffGram | Bir DiffGram okur ve verileri geçerli şemaya ekler.
DiffGram yeni satırları, benzersiz tanımlayıcı değerlerinin eşleştiği mevcut satırlarla birleştirir. Bu konunun sonundaki "XML'den Verileri Birleştirme" bölümüne bakın. DiffGrams hakkında daha fazla bilgi için bkz . DiffGrams. |
| Parça | Akışın sonuna ulaşılana kadar birden çok XML parçasını okumaya devam eder. Şemayla DataSet eşleşen parçalar uygun tablolara eklenir. Şemayla DataSet eşleşmeyen parçalar atılır. |
Not
Bir XML belgesinin içine yerleştirilmiş XmlReader konumundaki bir ReadXml öğesine geçerseniz, ReadXml sonraki öğe düğümüne kadar okur ve bunu kök öğe olarak değerlendirir, yalnızca o öğe düğümünün sonuna kadar okur. XmlReadMode.Fragment belirtirseniz bu geçerli değildir.
DTD Varlıkları
XML'niz bir belge türü tanımı (DTD) şemasında tanımlanmış varlıklar içeriyorsa, bir dosya adı, akış veya doğrulayıcı olmayan bir XmlReader geçirerek ReadXml'e yüklemeye çalışırsanız bir istisna fırlatılır. Bunun yerine, EntityHandling.ExpandEntities olarak ayarlanmış bir EntityHandling oluşturmanız ve öğesini XmlValidatingReader geçirmeniz gerekir.
XmlValidatingReader, DataSet tarafından okunmadan önce varlıkları genişletir.
Aşağıdaki kod örnekleri bir XML akışından nasıl yükleneceklerini DataSet gösterir. İlk örnekte, bir dosya adının ReadXml yöntemine geçirildiği gösterilmektedir. İkinci örnekte, kullanılarak yüklenen XML içeren bir StringReaderdize gösterilmektedir.
Dim dataSet As DataSet = New DataSet
dataSet.ReadXml("input.xml", XmlReadMode.ReadSchema)
DataSet dataSet = new DataSet();
dataSet.ReadXml("input.xml", XmlReadMode.ReadSchema);
Dim dataSet As DataSet = New DataSet
Dim dataTable As DataTable = New DataTable("table1")
dataTable.Columns.Add("col1", Type.GetType("System.String"))
dataSet.Tables.Add(dataTable)
Dim xmlData As String = "<XmlDS><table1><col1>Value1</col1></table1><table1><col1>Value2</col1></table1></XmlDS>"
Dim xmlSR As System.IO.StringReader = New System.IO.StringReader(xmlData)
dataSet.ReadXml(xmlSR, XmlReadMode.IgnoreSchema)
DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable("table1");
dataTable.Columns.Add("col1", typeof(string));
dataSet.Tables.Add(dataTable);
string xmlData = "<XmlDS><table1><col1>Value1</col1></table1><table1><col1>Value2</col1></table1></XmlDS>";
System.IO.StringReader xmlSR = new System.IO.StringReader(xmlData);
dataSet.ReadXml(xmlSR, XmlReadMode.IgnoreSchema);
Not
Çok büyük bir dosyayı yüklemeyi çağırırsanız ReadXml , yavaş performansla karşılaşabilirsiniz. ReadXml için en iyi performansı sağlamak için, büyük bir dosyada içindeki her tablonun yöntemini çağırın BeginLoadDataDataSet ve ardından ReadXml'yi çağırın. Son olarak, aşağıdaki örnekte gösterildiği gibi içindeki EndLoadDataher tablo için çağrısı DataSet yapın.
Dim dataTable As DataTable
For Each dataTable In dataSet.Tables
dataTable.BeginLoadData()
Next
dataSet.ReadXml("file.xml")
For Each dataTable in dataSet.Tables
dataTable.EndLoadData()
Next
foreach (DataTable dataTable in dataSet.Tables)
dataTable.BeginLoadData();
dataSet.ReadXml("file.xml");
foreach (DataTable dataTable in dataSet.Tables)
dataTable.EndLoadData();
Not
DataSet için XSD şemanızda bir targetNamespace varsa, veriler okunamayabilir ve niteleyici ad alanına sahip olmayan öğeler içeren XML ile DataSet yüklemek için ReadXml çağrısı yaparken özel durumlarla karşılaşabilirsiniz. Bu durumda, XSD şemanızda elementFormDefault değerini "qualified" olarak ayarlayarak nitelenmemiş öğeleri okuyun. Örneğin:
<xsd:schema id="customDataSet"
elementFormDefault="qualified"
targetNamespace="http://www.tempuri.org/customDataSet.xsd"
xmlns="http://www.tempuri.org/customDataSet.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
</xsd:schema>
XML'den Veri Birleştirme
DataSet zaten veri içeriyorsa, XML'den alınan yeni veriler içinde DataSetzaten var olan verilere eklenir.
ReadXml XML'den DataSet eşleşen birincil anahtarlara sahip satır bilgileriyle birleştirilmez. Mevcut satır bilgilerini XML'den gelen yeni bilgilerle değiştirmek için ReadXml kullanarak yeni bir DataSet oluşturun ve ardından Merge yeni DataSet bilgilerini mevcut DataSet içine yazın.
ReadXML ve XmlReadMode ile DiffGram yüklemenin, aynı benzersiz tanımlayıcıya sahip satırları birleştireceğini unutmayın.