如何使用多个表从SQL表创建XML / XSD

时间:2009-10-28 15:54:17

标签: c# sql xml schema xsd

如何从具有多个表的SQL表创建XML / XSD

我想要做的是从数据库(或数据库架构)创建XML架构

这个post有一些有趣的代码

特别

DataSet results = new DataSet();

SqlCommand command = new SqlCommand("SELECT * FROM table", new SqlConnection(connectionString));

SqlDataAdapter sqlAdapter = new SqlDataAdapter(command);

sqlAdapter.FillSchema(results, SchemaType.Mapped);//Fills dataset with schema from query
results.WriteXmlSchema(mySchema);

但是如何从多个表生成此XML架构?如果我只是做

Select * from table1,table2

所有数据都在XML中的一个大blob中

我想要的是XML中定义的每个表,它的内容是分开的。   

1 个答案:

答案 0 :(得分:0)

您可以单独获取每个表的架构,并使用XDocument将其组合。这是从数据库查询中获取模式的函数:

XDocument GrabSchema(
   string dataSetName,
   string sql)
{
   var con = new SqlConnection("<<YourConnectionString>>");
   var command = new SqlCommand(sql, con);
   var sqlAdapter = new SqlDataAdapter(command);
   var dataSet = new DataSet(dataSetName);
   sqlAdapter.FillSchema(dataSet, SchemaType.Mapped);
   var stream = new MemoryStream();
   dataSet.WriteXmlSchema(stream);
   stream.Seek(0, System.IO.SeekOrigin.Begin);
   return XDocument.Load(XmlReader.Create(stream));
}

然后组合两个表模式,如:

var firstSchema = GrabDataset("t1", "select a = 49");
var secondSchema = GrabDataset("t2", "select b = '50'");
firstSchema.Root.Add(secondSchema.Root.Elements());

您可以通过将组合架构加载到另一个DataSet来验证组合架构是否有意义:

DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema(firstSchema.CreateReader());