2014-10-09 73 views
0

嗨,请告诉我如何使用查询从SQL Server中的表生成XML文件。 我的查询是,如何编写查询以从SQL Server生成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> 

在这里,我想要将根节点添加为j obs和子根节点作为工作。我试过 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> 

谢谢。

回答

1

试试这个

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') 
+0

谢谢@Abhishek,我试过你的代码..它给这样的输出.. - -

....>
Srinivas 2014-10-09 06:40:51

+0

您好1612,其相当难以生成整个代码,在这种情况下,我的方法是:从存储过程中,我将返回'xml'和c#代码我会选择字符串而不是数据集。在写入xml文件之前,只需应用linq即可获得元素。 LinQ like'var result = xmldoc.Element(“Jobs”))'.........将执行像'' 。 – Abhishek 2014-10-09 06:53:09

+0

谢谢@Abhishek,如果我从查询工作中删除'FOR XML PATH('Job'),ROOT('JOBS')'。但我得到了

节点。 – Srinivas2014-10-09 12:07:29

0
 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的数据库中获取数据时,应该返回DataSetDataSetName = "Jobs"DataTable的defaultTableName应该是Job!

由于我写这个例子,你没有显示从数据库中获取数据的方法!

编辑:

首先在btnXML_Click写这样的:

DataSet dsJobsDetails = GetJobDetails(); 

,而不是

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

private DataSet GetJobDetails()写这样的:

逸aSet ds = new DataSet(“Jobs”);的

代替:

DataSet ds = null; 

IN SQLProvider类,你应该添加属性表名,当DataSqlAdapter.Fill本查询:

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

你需要的属性TableName值设置为Job

+0

谢谢@mybirthname。我更新了我的查询,请检查它.. – Srinivas 2014-10-09 06:07:16

+0

@ 1612我希望您使用SqlDataAdapter.Fill方法返回dataSet? – mybirthname 2014-10-09 06:11:15

+0

@ 1612我不能更具体地希望它可以帮助你。 – mybirthname 2014-10-09 06:21:10