Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zawartość ADO.NET DataSet można utworzyć na podstawie strumienia XML lub dokumentu. Ponadto dzięki programowi .NET Framework możesz mieć dużą elastyczność co do tego, jakie informacje są ładowane z kodu XML i jak jest tworzona struktura schematu DataSet lub relacyjna.
Aby wypełnić element DataSet danymi z kodu XML, użyj ReadXml metody DataSet obiektu . Metoda ReadXml odczytuje z pliku, strumienia lub xmlReader i przyjmuje jako argumenty źródło kodu XML oraz opcjonalny XmlReadMode argument. Aby uzyskać więcej informacji na temat elementu XmlReader, zobacz Odczytywanie danych XML przy użyciu elementu XmlTextReader. Metoda ReadXml odczytuje zawartość strumienia XML lub dokumentu i ładuje element z DataSet danymi. Spowoduje to również utworzenie schematu DataSet relacyjnego w zależności od określonego XmlReadMode i tego, czy schemat relacyjny już istnieje.
W poniższej tabeli opisano opcje argumentu XmlReadMode .
| Opcja | Opis |
|---|---|
| Automatycznie | Jest to opcja domyślna. Sprawdza kod XML i wybiera najbardziej odpowiednią opcję w następującej kolejności: — Jeśli kod XML jest DiffGram, DiffGram jest używany.— Jeśli element DataSet zawiera schemat lub kod XML zawiera wbudowany schemat, ReadSchema jest używany.- Jeśli DataSet nie zawiera schematu, a kod XML nie zawiera schematu wewnętrznego, InferSchema jest używany.Jeśli znasz format odczytywanego kodu XML, aby uzyskać najlepszą wydajność, zaleca się ustawienie jawnego elementu XmlReadMode, a nie zaakceptowanie wartości domyślnej Auto . |
| ReadSchema | Odczytuje dowolny schemat wbudowany i ładuje dane i schemat. DataSet Jeśli schemat zawiera już schemat, nowe tabele są dodawane ze schematu wbudowanego do istniejącego schematu DataSetw pliku . Jeśli w schemacie wbudowanym istnieją już jakiekolwiek tabele, DataSetzostanie zgłoszony wyjątek. Nie będzie można zmodyfikować schematu istniejącej tabeli przy użyciu elementu XmlReadMode.ReadSchema. Jeśli schemat DataSet nie zawiera schematu i nie ma wbudowanego schematu, żadne dane nie są odczytywane. Schemat wbudowany można zdefiniować przy użyciu schematu języka definicji schematu XML (XSD). Aby uzyskać szczegółowe informacje na temat pisania schematu wbudowanego jako schematu XML, zobacz Wyprowadzanie struktury relacyjnej zestawu danych ze schematu XML (XSD). |
| IgnorujSchema | Ignoruje dowolny schemat wbudowany i ładuje dane do istniejącego DataSet schematu. Wszystkie dane, które nie pasują do istniejącego schematu, zostaną odrzucone. Jeśli w elemecie DataSetnie istnieje żaden schemat, żadne dane nie są ładowane. Jeśli dane są DiffGram, IgnoreSchema mają taką samą funkcjonalność jak DiffGram. |
| InferSchema | Ignoruje dowolny schemat wbudowany i wywnioskuje schemat zgodnie ze strukturą danych XML, a następnie ładuje dane. DataSet Jeśli schemat zawiera już schemat, bieżący schemat zostanie rozszerzony przez dodanie kolumn do istniejących tabel. Dodatkowe tabele nie zostaną dodane, jeśli nie ma istniejących tabel. Wyjątek jest zgłaszany, jeśli wywnioskowana tabela już istnieje z inną przestrzenią nazw lub jeśli jakiekolwiek wywnioskowane kolumny powodują konflikt z istniejącymi kolumnami. Aby uzyskać szczegółowe informacje na temat wnioskowania ReadXmlSchema schematu z dokumentu XML, zobacz Wnioskowanie struktury relacyjnej zestawu danych z formatu XML. |
| DiffGram | Odczytuje diffGram i dodaje dane do bieżącego schematu.
DiffGram scala nowe wiersze z istniejącymi wierszami, w których są zgodne unikatowe wartości identyfikatora. Zobacz "Scalanie danych z xml" na końcu tego tematu. Aby uzyskać więcej informacji na temat diffGrams, zobacz DiffGrams. |
| fragmentu | Kontynuuje odczytywanie wielu fragmentów XML do końca strumienia. Fragmenty zgodne ze schematem DataSet są dołączane do odpowiednich tabel. Fragmenty niezgodne ze schematem DataSet są odrzucane. |
Uwaga
Jeśli przekażesz XmlReader do ReadXml, które jest umieszczone w jakiejś części dokumentu XML, ReadXml odczyta kolejny węzeł elementu i potraktuje go jako element główny, odczytując do końca tego węzła elementu. Nie ma to zastosowania w przypadku określenia elementu XmlReadMode.Fragment.
Jednostki DTD
Jeśli Twój kod XML zawiera jednostki zdefiniowane w schemacie definicji typu dokumentu (DTD), to przy próbie załadowania DataSet za pomocą nazwy pliku, strumienia lub nieprawidłowego XmlReader w metodzie ReadXml zostanie zgłoszony wyjątek. Zamiast tego należy utworzyć element XmlValidatingReader z ustawieniem na EntityHandlingEntityHandling.ExpandEntities i przekazać go do XmlValidatingReaderReadXml.
XmlValidatingReader rozszerzy byty przed ich odczytaniem przez DataSet.
W poniższych przykładach kodu pokazano, jak załadować element DataSet ze strumienia XML. W pierwszym przykładzie pokazano, że nazwa pliku jest przekazywana do metody ReadXml. W drugim przykładzie pokazano ciąg zawierający kod XML ładowany przy użyciu elementu StringReader.
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);
Uwaga
Jeśli wywołasz ReadXml w celu załadowania bardzo dużego pliku, możesz napotkać wolne działanie. Aby zapewnić najlepszą wydajność dla funkcji ReadXml, w dużym pliku wywołaj metodę BeginLoadData dla każdej tabeli w DataSetpliku , a następnie wywołaj metodę ReadXml. Na koniec wywołaj EndLoadData każdą tabelę DataSetw tabeli , jak pokazano w poniższym przykładzie.
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();
Uwaga
Jeśli schemat XSD dla elementu DataSet zawiera targetNamespace, dane mogą nie być odczytywane i mogą wystąpić wyjątki podczas wywoływania ReadXml do załadowania DataSet z XML, który zawiera elementy bez kwalifikowanego namespace. Aby odczytać niekwalifikowane elementy w tym przypadku, ustaw wartość elementFormDefault na "qualified" w schemacie XSD. Na przykład:
<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>
Scalanie danych z pliku XML
DataSet Jeśli obiekt zawiera już dane, nowe dane z pliku XML są dodawane do danych znajdujących się już w pliku DataSet.
ReadXml nie łączy z pliku XML do DataSet żadnych informacji o wierszach z pasującymi kluczami głównymi. Aby zastąpić istniejące informacje o wierszu nowymi informacjami z pliku XML, użyj ReadXml, aby utworzyć nowy DataSet, a następnie Merge nowy DataSet w istniejącym DataSet pliku. Należy pamiętać, że ładowanie DiffGram przy użyciu ReadXML z XmlReadMode i DiffGram spowoduje scalanie wierszy, które mają ten sam unikatowy identyfikator.
Zobacz też
- DataSet.Merge
- Używanie języka XML w elemencie DataSet
- Elementy DiffGram
- Pobieranie relacyjnej struktury elementu DataSet ze schematu XML (XSD)
- Wnioskowanie relacyjnej struktury elementu DataSet z pliku XML
- Ładowanie informacji o schemacie elementu DataSet z pliku XML
- Elementy DataSet, DataTable i DataView
- Omówienie ADO.NET