如何将数据集映射保存到 XSD 架构文件

此示例阐释如何将内部数据集 (DataSet) 映射保存到 XML 架构定义语言 (XSD) 架构文件中。此示例通过使用数据集上的关系方法生成映射以创建表和列。然后,该示例将这些映射的 XSD 架构表示形式写到文件中。

  XML和关系数据----将数据集映射保存到XSD架构文件
VB SaveDataSetMapXSDSchema.aspx

[运行示例] | [查看源代码]

DataSet 和 XmlDataDocument 类都表示内存中的数据缓存。DataSet 提供面向关系的导航和编辑方法,而 XmlDataDocument 提供 XML 导航和编辑方法。

此示例从 XmlDataDocument 获取 DataSet 属性,使用该属性生成一组表和列,然后填充这些表和列。然后,该示例写出内部生成的架构。

下列示例代码生成两个表,一个用于人,另一个用于宠物。该示例使用 ID 作为每个表的主关键字,并建立人和他们的宠物之间的关系表。为此,该示例首先创建 XmlDataDocument 的一个实例,然后将与 XmlDataDocument 关联的数据集传递给 LoadDataSet 方法。

XmlDataDocument datadoc = new XmlDataDocument();
            LoadDataSet(datadoc.DataSet);
            
Dim datadoc As XmlDataDocument = New XmlDataDocument()
            LoadDataSet(datadoc.DataSet)
            
C# VB  

LoadDataSet 方法使用关系数据加载数据集。

// Load a DataSet with relational data
            private void LoadDataSet(DataSet dataset)
            {
            try
            {
            Console.WriteLine("Loading the DataSet ...");
            // Set DataSet name
            dataset.DataSetName = "PersonPet";
            // Create tables for people and pets
            DataTable people = new DataTable("Person");
            DataTable pets = new DataTable("Pet");
            // Set up the columns in the Tables
            DataColumn personname = new DataColumn ("Name", typeof(String));
            DataColumn personAge = new DataColumn ("Age", typeof(Int32));
            DataColumn petname = new DataColumn ("Name", typeof(String));
            DataColumn pettype = new DataColumn ("Type", typeof(String));
            // Add columns to person table
            DataColumn id = people.Columns.Add("ID", typeof(Int32));
            id.AutoIncrement = true;
            people.PrimaryKey = new DataColumn[] {id};
            people.Columns.Add (personname);
            people.Columns.Add (personAge);
            // Add columns to pet table
            id = pets.Columns.Add("ID", typeof(Int32));
            id.AutoIncrement = true;
            pets.PrimaryKey = new DataColumn[] {id};
            id.AutoIncrement = true;
            DataColumn ownerid = pets.Columns.Add("OwnerID", typeof(Int32));
            DataColumn[] foreignkey = new DataColumn[] {ownerid};
            pets.Columns.Add (petname);
            pets.Columns.Add (pettype);
            // Add tables to the DataSet
            dataset.Tables.Add (people);
            dataset.Tables.Add (pets);
            // Add people
            DataRow mark = people.NewRow();
            mark[personname] = "Mark";
            mark[personAge] = 18;
            people.Rows.Add(mark);
            DataRow william = people.NewRow();
            william[personname] = "William";
            william[personAge] = 12;
            people.Rows.Add(william);
            DataRow james = people.NewRow();
            james[personname] = "James";
            james[personAge] = 7;
            people.Rows.Add(james);
            DataRow levi = people.NewRow();
            levi[personname] = "Levi";
            levi[personAge] = 4;
            people.Rows.Add(levi);
            // Add relationships
            Console.WriteLine("Creating relationships between people and pets ...");
            DataRelation personpetrel = new DataRelation ("PersonPet",people.PrimaryKey, foreignkey);
            dataset.Relations.Add (personpetrel);
            // Add pets
            DataRow row = pets.NewRow();
            row["OwnerID"] = mark["ID"];
            row[petname] = "Frank";
            row[pettype] = "cat";
            pets.Rows.Add(row);
            row = pets.NewRow();
            row["OwnerID"] = william["ID"];
            row[petname] = "Rex";
            row[pettype] = "dog";
            pets.Rows.Add(row);
            row = pets.NewRow();
            row["OwnerID"] = james["ID"];
            row[petname] = "Cottontail";
            row[pettype] = "rabbit";
            pets.Rows.Add(row);
            row = pets.NewRow();
            row["OwnerID"] = levi["ID"];
            row[petname] = "Sid";
            row[pettype] = "snake";
            pets.Rows.Add(row);
            row = pets.NewRow();
            row["OwnerID"] = levi["ID"];
            row[petname] = "Tickles";
            row[pettype] = "spider";
            pets.Rows.Add(row);
            row = pets.NewRow();
            row["OwnerID"] = william["ID"];
            row[petname] = "Tweetie";
            row[pettype] = "canary";
            pets.Rows.Add(row);
            // commit changes
            dataset.AcceptChanges();
            }
            catch (Exception e)
            {
            Console.WriteLine("Exception: {0}", e.ToString());
            }
            }
            
' Load a DataSet with relational data
            private sub LoadDataSet(dataset as DataSet)
            try
            Console.WriteLine("Loading the DataSet ...")
            ' Set DataSet name
            dataset.DataSetName = "PersonPet"
            ' Create tables for people and pets
            Dim people as DataTable = new DataTable("Person")
            Dim pets as DataTable = new DataTable("Pet")
            ' Set up the columns in the Tables
            Dim personname as DataColumn = new DataColumn ("Name", GetType (System.String))
            Dim personAge as DataColumn = new DataColumn ("Age", GetType (System.Int32))
            Dim petname as DataColumn = new DataColumn ("Name", GetType (System.String))
            Dim pettype as DataColumn = new DataColumn ("Type", GetType (System.String))
            ' Add columns to person table
            Dim id as DataColumn = people.Columns.Add("ID", GetType (System.Int32))
            id.AutoIncrement = true
            Dim primarykey as DataColumn() = new DataColumn() {id}
            people.PrimaryKey = primarykey
            people.Columns.Add (personname)
            people.Columns.Add (personAge)
            ' Add columns to pet table
            id = pets.Columns.Add("ID", GetType (System.Int32))
            id.AutoIncrement = true
            pets.PrimaryKey = new DataColumn() {id}
            id.AutoIncrement = true
            Dim ownerid as DataColumn = pets.Columns.Add("OwnerID", GetType (System.Int32))
            Dim foreignkey as DataColumn() = new DataColumn() {ownerid}
            pets.Columns.Add (petname)
            pets.Columns.Add (pettype)
            ' Add tables to the DataSet
            dataset.Tables.Add (people)
            dataset.Tables.Add (pets)
            ' Add people
            Dim mark as DataRow = people.NewRow()
            mark(personname) = "Mark"
            mark(personAge) = 18
            people.Rows.Add(mark)
            Dim william as DataRow = people.NewRow()
            william(personname) = "William"
            william(personAge) = 12
            people.Rows.Add(william)
            Dim james as DataRow = people.NewRow()
            james(personname) = "James"
            james(personAge) = 19
            people.Rows.Add(james)
            Dim levi as DataRow = people.NewRow()
            levi(personname) = "Levi"
            levi(personAge) = 4
            people.Rows.Add(levi)
            ' Add relationships
            Console.WriteLine("Creating relationships between people and pets ...")
            Dim personpetrel as DataRelation = new DataRelation ("PersonPet", primarykey, foreignkey, false)
            dataset.Relations.Add (personpetrel)
            ' Add pets
            Dim row as DataRow = pets.NewRow()
            row("OwnerID") = mark("ID")
            row(petname) = "Frank"
            row(pettype) = "cat"
            pets.Rows.Add(row)
            row = pets.NewRow()
            row("OwnerID") = william("ID")
            row(petname) = "Rex"
            row(pettype) = "dog"
            pets.Rows.Add(row)
            row = pets.NewRow()
            row("OwnerID") = james("ID")
            row(petname) = "Cottontail"
            row(pettype) = "rabbit"
            pets.Rows.Add(row)
            row = pets.NewRow()
            row("OwnerID") = levi("ID")
            row(petname) = "Sid"
            row(pettype) = "snake"
            pets.Rows.Add(row)
            row = pets.NewRow()
            row("OwnerID") = levi("ID")
            row(petname) = "Tickles"
            row(pettype) = "spider"
            pets.Rows.Add(row)
            row = pets.NewRow()
            row("OwnerID") = william("ID")
            row(petname) = "Tweetie"
            row(pettype) = "canary"
            pets.Rows.Add(row)
            ' commit changes
            dataset.AcceptChanges()
            catch e as Exception
            Console.WriteLine ("Exception: {0}", e.ToString())
            end try
            end sub
            
C# VB  

DataSet 的 AcceptChanges 方法接受所有的更改,这些更改是自加载数据集以来或自上次调用 AcceptChanges 以来对数据集所做的更改。所有新的和修改过的行保持不变,移除已删除的行。有关其他 DataSet 关系方法的更多信息,请参阅如何获取 ADO.NET 的概述

为了将架构保存到文件,该示例调用 DataSet 的 WriteXmlSchema 方法,传递表示目标文件的 StreamWriter 类。

StreamWriter writer = null;
            try
            {
            Console.WriteLine("Writing the schema to {0} ...", mySaveSchema);
            writer = new StreamWriter(mySaveSchema);
            datadoc.DataSet.WriteXmlSchema(writer);
            }
            catch (Exception e)
            {
            Console.WriteLine("Exception: {0}", e.ToString());
            }
            finally
            {
            if (writer != null)
            writer.Close();
            }
            
Dim writer as StreamWriter
            try
            Console.WriteLine("Writing the schema to {0} ...", mySaveSchema)
            writer = new StreamWriter(mySaveSchema)
            datadoc.DataSet.WriteXmlSchema(writer)
            catch e as Exception
            Console.WriteLine ("Exception: {0}", e.ToString())
            finally
            If Not writer Is Nothing
            writer.Close()
            end if
            end try
            
C# VB  

下列输出显示由 DisplayTables 方法在数据集中创建的表。有关 DisplayTables 方法的更多信息,请参阅如何从 XML 推导出数据集映射。该示例将推导出的架构写到 PersonPet.xsd 文件中。

Loading the DataSet ...
Creating relationships between people and pets ...
DataSet:
PersonPet contains ...
No of Tables: 2  Table content ...
TableName = Person
---------
Columns ...
ID                    Name                  Age
Number of rows = 4
Rows ...
0                     Mark                  18
1                     William               12
2                     James                 19
3                     Levi                  4
TableName = Pet
---------
Columns ...
ID                    OwnerID               Name                  Type
Number of rows = 6
Rows ...
0                     0                     Frank                 cat
1                     1                     Rex                   dog
2                     2                     Cottontail            rabbit
3                     3                     Sid                   snake
4                     3                     Tickles               spider
5                     1                     Tweetie               canary
PersonPet
Name = Mark owns
Pet = Frank the cat
Name = William owns
Pet = Rex the dog
Pet = Tweetie the canary
Name = James owns
Pet = Cottontail the rabbit
Name = Levi owns
Pet = Sid the snake
Pet = Tickles the spider
Writing the schema to PersonPet.xsd ...

摘要

  1. WriteXmlSchema 方法将数据集中的关系数据的内部结构映射保存为 XSD 架构。
  2. XmlDataDocument 的 DataSet 属性使您能够相关地查看和管理 XML 文档中的结构化数据

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-04
  • 2022-12-23
  • 2021-08-16
猜你喜欢
  • 2022-02-21
  • 2021-05-28
  • 2022-03-09
  • 2022-12-23
  • 2022-01-21
  • 2021-11-04
  • 2021-05-18
相关资源
相似解决方案