2012-03-23 90 views
1

我正在创建一个需要从名为SalesOrders的SQL Server表中读取条目的DotNetNuke模块。该模块只能显示那些STatus = Pending的记录。我需要从我的数据库表中创建一个XML文件,以选择上面的记录。这是如何在Visual Studio 2010中完成的?我开始使用XML Schema Explorer手动创建XSD。不知道这是否正确?请注意,我需要进行XSL转换,以便我可以将XML文件的内容提供给我的模块,以便我可以允许用户在给定的日期范围内选择发票。在该模块中,用户需要为从XML文件读取的每个发票启用复选框,并将其标记为已付款。如何从SQL Server表生成XML/XSD?

我是否采取了相对于手动创建XSD的适当方法,还是有更自动化的方法?

非常感谢!

+0

这可以“即时”完成,以便新的XML文件始终可用? – SidC 2012-03-23 06:38:18

+0

真棒链接。这应该在单独的类文件中还是在ascx.cs文件中完成? – SidC 2012-03-23 06:46:14

回答

2

此代码将填充一个DataTable然后将其写入到一个XML字符串:

DataTable dt = new DataTable(); 
    using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["connection"].ConnectionString)) 
    { 
     connection.Open(); 

     System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(); 
     command.Connection = connection; 

     command.CommandText = @"SELECT * FROM SalesOrders WHERE STatus = 'Pending'"; 

     System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(command); 
     adapter.Fill(dt); 
    } 
    MemoryStream ms = new MemoryStream(); 
    dt.WriteXml(ms, XmlWriteMode.IgnoreSchema); 
    ms.Seek(0, SeekOrigin.Begin); 
    StreamReader sr = new StreamReader(ms); 
    string xml = sr.ReadToEnd(); 
    ms.Close(); 
    return xml; 

你可以使用不同的方法来填充数据表,如果你想

+0

谢谢:)我如何设置连接到SalesOrderDetail和RecurringSalesOrders?我是否创建3个单独的数据表并将其导出到3个单独的XML Fiels,或者1个数据表可以通过连接从SalesOrders的其他2个表中?如果有3个单独的数据表,我可以分别为每个数据表调用WriteXml吗? – SidC 2012-03-23 16:15:52

0

从SQL Server表创建一个DataTable,然后使用然后使用DataTable.WriteXml将数据导出到XML文件。

0

这是一个简单的方法。

DECLARE @xmlDoc XML 
SET @xmlDoc = 
    (
     SELECT * from Employees where EmployeeID IN  (7032,7478,6967,6862,6861,7469,6947,6951,7009,7010) 
     FOR XML AUTO, ELEMENTS, BINARY BASE64 
) 
SELECT @xmlDoc