如题:请各位高手帮忙解答,谢谢!
[color=#FF0000]使用C#如何将sqlserver2005数据导出为规定格式的XML文档?[/color]
现有sqlserver2005数据库(school),内有表student:
  id  name    sex  age  学号  语文  英语  数学  学期
  1   tom     男   16   1001  88    87    86    1
  2   kitty   女   15   1002  81    80    93    1
  3   kitty   女   15   1002  85    84    91    2
  4   tom     男   16   1001  92    83    89    2
  5   kitty   女   15   1002  86    83    94    3用C#如何将上述数据导出为如下格式的两个XML文档:<?xml version="1.0" standalone="yes"?>
<student>    
    <name>tom</name>
    <sex>男</sex>
    <age>16</age>
    <item>
    <学号>1001</学号>
      <成绩>
        <学期>1</学期>
        <语文>88</语文>
        <英语>87</英语>
        <数学>86</数学>
      </成绩>
    </item> 
    <item>
    <学号>1001</学号>
      <成绩>
        <学期>2</学期>
        <语文>92</语文>
        <英语>83</英语>
        <数学>89</数学>
      </成绩>
    </item> 
</student>
<?xml version="1.0" standalone="yes"?>
<student>    
    <name>kitty</name>
    <sex>女</sex>
    <age>15</age>
    <item>
    <学号>1002</学号>
      <成绩>
        <学期>1</学期>
        <语文>81</语文>
        <英语>80</英语>
        <数学>93</数学>
      </成绩>
    </item> 
    <item>
    <学号>1002</学号>
      <成绩>
        <学期>2</学期>
        <语文>85</语文>
        <英语>84</英语>
        <数学>91</数学>
      </成绩>
    </item> 
    <item>
    <学号>1002</学号>
      <成绩>
        <学期>3</学期>
        <语文>86</语文>
        <英语>83</英语>
        <数学>94</数学>
      </成绩>
    </item> 
</student>

解决方案 »

  1.   

    本人小菜鸟,请说详细点,谢谢!
    我是想将数据导出为带子节点的XML,向上面两个XML那样的格式:
    根节点为student; 
    name,sex,age,item(增加的子节点) 作为student的子节点;
    学号 和 成绩(增加的子节点) 作为item的子节点; 
    学期,语文,数学,英语 作为 成绩 的子节点。
      

  2.   

    IF OBJECT_ID(N'dbo.p_ExportHtml') IS NOT NULL    DROP PROC dbo.p_ExportHtml;GO /*-- == 导出表/视图中的数据为html 文件====================== 此存储过程用于将指定的表/视图中的数据导出为 html 文件由于是使用存储过程, 因此文件目录基于 sql server 服务器 存储过程中会使用xp_cmdshell 调用bcp 来写文件因此必须打开xp_cmdshell 功能, 可以使用下面的脚本实现EXEC sp_configure N'show advanced options', 1 RECONFIGURE;EXEC sp_configure N'xp_cmdshell', 1 RECONFIGURE; ----------------------------------------------------------- 调用示例EXEC dbo.p_ExportHtml    @object_name = N'sys.objects',    @file_name = N'c:/test.html'; ----------------------------------------------------------- 环境要求适用于sql server 2005 或者更高的版本 -- ==== 邹建2008.11(引用请保留此信息) =============== */CREATE PROC dbo.p_ExportHtml    @object_name sysname,    @file_name nvarchar(260),    @title nvarchar(1000) = NULL -- html 标题, 为NULL时使用@object_nameASSET NOCOUNT ON; DECLARE    @sql_field nvarchar(max),    @sql_body nvarchar(max);SELECT    @sql_field = N'',    @sql_body = N''SELECT    @sql_field = @sql_field           + N' UNION ALL SELECT field_name = N' + QUOTENAME(C.name, N''''),    @sql_body = @sql_body           + N', [td/@align] = '              + QUOTENAME(                     CASE                         WHEN T.name LIKE N'%int'                                OR T.name LIKE N'%money'                                OR T.name IN(N'real', N'float', N'decimal', N'numeric')                            THEN 'right'                         WHEN T.name IN(N'bit')                            THEN 'center'                         ELSE 'left'                     END,                     '''')           + N', [td] = '              + CASE                  WHEN T.name IN(N'xml')                     THEN N'CONVERT(nvarchar(max), ' + QUOTENAME(C.name) + N')'                  ELSE QUOTENAME(C.name)              END           + N', NULL'FROM sys.all_columns C    INNER JOIN sys.types T       ON T.system_type_id = C.system_type_id           AND T.system_type_id = T.user_type_idWHERE  C.object_id = OBJECT_ID(@object_name)ORDER BY C.column_id; IF @@ROWCOUNT = 0BEGIN    RAISERROR(N'can''t found object "%s"', 16, 1, @object_name);    RETURN -1;END DECLARE    @temp_proce_name sysname,    @sql nvarchar(max),    @cmd nvarchar(4000); SELECT    @temp_proce_name = QUOTENAME(N'##_'                                + CONVERT(char(10), GETDATE(), 112)                                + N'_' + CONVERT(char(36), NEWID())                                ),      @sql = N'CREATE PROC ' + @temp_proce_name + N'ASWITHFIELD AS(    ' + STUFF(@sql_field, 1, 11, N'') + N'),DATA AS(    SELECT * FROM ' + @object_name + N')SELECT    [H1] = N''' + REPLACE(ISNULL(@title, @object_name), N'''', N'''''') + N''',    [table/@border] = 1,    [tr] = (           SELECT              [*] = field_name           FROM FIELD           FOR XML PATH(''th''), TYPE           ),    [*] = (           SELECT ' + STUFF(@sql_body, 1, 2, N'') + N'           FROM DATA           FOR XML PATH(''tr''), TYPE       )FOR XML PATH(''html''), TYPE;'; -- 生成临时处理存储过程EXEC sp_executesql    @sql; -- 输出结果到文件SET @cmd = N'bcp "EXEC ' + QUOTENAME(DB_NAME())        + N'.' +  @temp_proce_name        + N'" queryout ' + QUOTENAME(@file_name, N'"')       + N' /T /w';DECLARE @tb_re TABLE(    col nvarchar(4000));INSERT @tb_reEXEC sys.xp_cmdshell @cmd;DECLARE    @file_exist int;EXEC master.sys.xp_fileexist @file_name, @file_exist OUTPUT; -- 删除临时存储过程IF OBJECT_ID(@temp_proce_name) IS NOT NULL    EXEC(N'DROP PROC ' + @temp_proce_name + N';'); -- 检查文件生成是否成功IF @file_exist = 1BEGIN    RAISERROR(N'object "%s" output to "%s" succeed.', 10, 1, @object_name, @file_name);ENDELSEBEGIN    SELECT * FROM @tb_re;    RAISERROR(N'some error occur when generate html file, please check output information', 16, 1);    RETURN -1;ENDGO
      

  3.   

    ...没看懂,求解释~~~
    我用的VS2005连接sql2005数据库,读取表数据,用FOR XML生成XML文件的。
    我对数据库操作不熟,不知道有没有比较好的方法?