3

我有一个Select查询,它从表中选择前 10 个值

Create proc [dbo].[SP_Select_Top10]
as
   select DISTINCT top (10)
       Score, FBid 
   from 
       FB_Player 
   ORDER BY 
       Score DESC

我需要的是在xml文件中将此查询的结果作为。

<player>
    <name> </name>
    <score> </score>
</player>

我使用 ASP.NET 创建此文件,我该怎么做?

4

2 回答 2

4

像这样创建您的存储过程 - 使用FOR XML PATH(), ROOT()语法让 SQL Server 为您生成正确的 XML:

CREATE PROCEDURE dbo.procGetPlayerScore
AS BEGIN
    SELECT DISTINCT TOP (10)
        ID AS '@ID',   -- creates an attribute on the <Player> node
        Name,          -- gets output as element inside <Player>
        Score          -- gets output as element inside <Player>
    FROM 
        dbo.FB_Players
    ORDER BY 
        Score DESC 
    FOR XML PATH('Player'), ROOT('AllPlayers')
END

在您的 C# 代码中,您需要这样的东西 - 连接到数据库,执行存储过程,取回该存储过程的单行单列(生成的 XML):

// set up SQL Server connection and command to execute the stored procedure
using(SqlConnection conn = new SqlConnection("server=.;database=test;Integrated Security=SSPI"))
using (SqlCommand cmdGetPlayers = new SqlCommand("dbo.procGetPlayerScore", conn)) 
{
     // define that it's a stored procedure
     cmdGetPlayers.CommandType = CommandType.StoredProcedure;

     // open connection, execute procedure, get resulting XML, close connection
     conn.Open();
     string playersXml = cmdGetPlayers.ExecuteScalar().ToString();
     conn.Close();
}

结果,您将获得类似这样的 XML:

<AllPlayers>
    <Player ID="4">
        <Name>Player 4</Name>
        <Score>72.1500</Score>
    </Player>
    <Player ID="1">
        <Name>Player 1</Name>
        <Score>50.5000</Score>
    </Player>
    ......
</AllPlayers>
于 2013-09-04T08:46:49.053 回答
2

我建议查看 SQL Server 的本机 XML 选项

链接在这里

另请注意

<player>
<playername="" score="" />
</player>

不是有效的xml,它必须像

<player name="" score="" />

或者

<player>
    <name></name>
    <score></score>
</player>

取决于您想要以元素为中心还是以属性为中心,但所有这些都可以在 SQL 服务器 XML 输出选项中指定。然后,您可以让 ASP.NET 端将生成的查询保存为文件。

于 2013-09-04T08:21:01.543 回答