繁体   English   中英

如何编写查询以从SQL Server表生成XML文件

[英]How to write query to generate XML file from SQL Server table

嗨,请告诉我如何使用Query从SQL Server的Table中生成XML文件。 我的查询是

 select JobTitle as title,PostedDate as date from Jobs 

C#代码

 protected void btnXML_Click(object sender, EventArgs e)
        {
            try
            {
                DataSet dsJobsDetails = new DataSet();
                dsJobsDetails = GetJobDetails();
                string fileLoc = @"C:\JobDocuments\jobsxml.xml";
                FileStream fs = null;
                fs = File.Create(fileLoc);
                fs.Close();
                if (File.Exists(fileLoc))
                {
                    dsJobsDetails.WriteXml(fileLoc);
                }
            }
            catch { }
        }


private DataSet GetJobDetails()
        {
            DataSet ds = null;
            SQLProvider provider = new SQLProvider();
            SqlParameter[] paramCandidate = new SqlParameter[2];

            try
            {
                paramCandidate[0] = provider.MakeParameter("JobID", SqlDbType.VarChar, "0");
                paramCandidate[1] = provider.MakeParameter("AccountID", SqlDbType.Int, "0");
                ds = provider.RunProcedure("Usp_GetJobsDetailsForXML", paramCandidate);
            }
            catch (Exception ex)
            {
                SetLastError(ex);
                paramCandidate = null;
                provider = null;
                ds = null;
            }
            finally
            {
                paramCandidate = null;
                provider = null;
            }
            return ds;
        }

我的存储过程是

CREATE PROCEDURE [dbo].[Usp_GetJobsDetailsForXML]          
(                                   
    @JobID varchar(8000),  
    @AccountID int              
)                                  
AS                              

BEGIN                                                                   

    SET NOCOUNT ON;                                        
     select JobTitle as title,PostedDate as date,JobDescription as [description] from Jobs 
     where JobID in (@JobID)   
     --FOR XML PATH('Jobs')                                                   
END

它给出的输出如下,

 <NewDataSet>
    <Table>
      <title>DBA</title> 
      <date>2014-09-30</date> 
      </Table>
     <Table>
      <title>Manager</title> 
      <date>2014-09-30</date>
     </Table>
    </NewDataSet>

在这里我想将根节点添加为作业,并将子根节点添加为作业。 我尝试select JobTitle as title,PostedDate as date from Jobs FOR XML PATH('jobs')这是行不通的。 我想要输出如下

<jobs>
<job>
<title>
<![CDATA[ DBA ]]>
</title>
<date>
<![CDATA[ 2014-09-30 ]]>
</date>
</job>
<job>
<title>
<![CDATA[ Manager ]]>
</title>
<date>
<![CDATA[ 2014-09-30 ]]>
</date>
</job>
<jobs>

谢谢 ..

试试这个

    SELECT '<![CDATA[' + JobTitle + ']]>' as title,
       '<![CDATA[' + PostedDate + ']]>'  as date,
       '<![CDATA[' + JobDescription + ']]>' as [description] 
FROM Jobs 
     WHERE JobID in (@JobID)   
     FOR XML PATH('Job'), ROOT('JOBS')
        DataSet dst = new DataSet("Jobs");
        DataTable table = new DataTable("Job");

        DataColumn c1 = new DataColumn("Title");
        DataColumn c2 = new DataColumn("Date");
        table.Columns.Add(c1);
        table.Columns.Add(c2);

        DataRow row1 = table.NewRow();
        row1["Title"] = "T1";
        row1["Date"] = "D1";

        DataRow row2 = table.NewRow();
        row2["Title"] = "T2";
        row2["Date"] = "D2";

        table.Rows.Add(row1);
        table.Rows.Add(row2);

        dst.Tables.Add(table);

        string p = dst.GetXml();

这是您需要做的例子。 在您使用GetJobDetails方法从数据库中获取数据的情况下,应返回DataSet ,其中DataSetName = "Jobs"并且DataTable的defaultTableName应该为Job!

由于我为您编写了此示例,因此您没有显示从数据库中获取数据的方法!

编辑:

首先在btnXML_Click写:

DataSet dsJobsDetails = GetJobDetails();

代替

DataSet dsJobsDetails = new DataSet();
dsJobsDetails = GetJobDetails();

private DataSet GetJobDetails()如下所示:

DataSet ds = new DataSet(“ Jobs”);

代替:

DataSet ds = null;

SQLProvider类中,您应该添加属性TableName并在DataSqlAdapter.Fill时填充查询,如下所示:

 using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
 {
     adapter.Fill(resultDst, TableName);
 }

您需要将属性TableName值设置为Job

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM