2009-10-28 4 views
0

Comment créer XML/XSD de table SQL avec plusieurs tablesComment créer XML/XSD de table SQL avec plusieurs tables

ce que je veux faire est de créer un schéma XML à partir d'une base de données (ou schéma de base de données)

ce post a un code intéressant

particulièrement

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); 

Mais comment puis-je générer ce schéma XML à partir de plusieurs tables? Si je fais juste

Select * from table1,table2 

Toutes les données sont dans un grand blob dans le fichier XML

Ce que je veux est chaque table définie dans le fichier XML avec son contenu séparément. quelque chose

Répondre

0

Vous pouvez récupérer séparément le schéma de chaque table et le combiner à l'aide d'un XDocument. Voici une fonction pour saisir un schéma d'une requête de base de données:

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)); 
} 

Vous pouvez ensuite combiner les deux schémas de table comme:

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

Vous pouvez vérifier le schéma combiné est logique en le chargeant dans un autre DataSet:

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

C'est très utile je pense mais comment puis-je réécrire dans un fichier physique? Sur le readXMLSchema, j'obtiens un "sélection XPath invalide à l'intérieur du nœud de champ ....." DataSet _completeDataSet = new DataSet(); _completeDataSet.ReadXmlSchema (vehicleSchema.CreateReader()); _completeDataSet.WriteXmlSchema ("FleetsDatabaseSchema.xsd"); – Maestro1024

Questions connexes