2017-10-03 6 views
-1

SQLクエリからxmlを生成しようとしています。複数のSQLクエリの結果を結合し、ルート属性に囲まれる単一のxmlを生成する必要があります。C#を使用して複数のSQLクエリに対して個別のSINGLE xmlを生成します。

私は一つだけのクエリを使用しますが、私は同じR_NOを使用して別のSQLテーブルからレコードをプルし、それらを組み合わせて、それを保存したい場合、私は別のXMLを生成することができる午前ブローC#コード

class Program 
    { 
     static void Main(string[] args) 
     { 
      SqlConnection conn = null; 
      XmlReader reader; 
      XmlDocument xmlDoc; 
      DataTable rnos = new DataTable(); 

      try 
      { 
       string connString = "Connection"; 
       conn = new SqlConnection(connString); 

       SqlCommand cmd = new SqlCommand("select * from TopSection where r_no NOT like'C%' and s_seq='1'",conn); 
       conn.Open(); 

       SqlDataAdapter da = new SqlDataAdapter(cmd); 

       da.Fill(rnos); 

       DataRow dr; 

       string cmd1= @"SELECT 
    (SELECT * FROM TopSection where r_no = @rno and s_seq=1 FOR XML PATH('Top'), TYPE) AS 'Tops', 
    (SELECT * FROM office where r_no = @rno and s_seq=1 FOR XML PATH('Office'), TYPE) AS 'Offices', 
    (SELECT * FROM complete where r_no= @rno and s_seq=1 FOR XML PATH('Complete'), TYPE) AS 'Completes',"+"FOR XML PATH(''), ROOT('root') ,ELEMENTS XSINIL"; 

    for (int i = 1; i < 5; i++) 
       { 
        dr = rnos.Rows[i]; 
        string no= dr["r_no"].ToString(); 
        SqlCommand command = new SqlCommand(cmd1, conn); 
        command.Parameters.Add("@rno", SqlDbType.Char, 20).Value = no; 
        reader = command.ExecuteXmlReader(); 
        xmlDoc = new XmlDocument(); 
        while(reader.Read()) 
        { 
         xmlDoc.Load(reader); 
        } 
        xmlDoc.Save("C:TopSection-" + i + ".xml"); 
        } 


      } 
      catch(SqlException e) 
      { 
       throw e; 
      } 
     } 
    } 
} 

を持っていますXMLとして。私は、FORでの正しい構文のエラーとエラーに遭遇しています。私はこのようなxmlとして探しています

<root> 
    <tops> 
    <top>----</top> 
     <top>----</top> 
    </tops> 
    <offices> 
    <office>----</office> 
    <office>----</office> 
    </offices> 
    <completes> 
    <complete>---</complete> 
    <complete>---</complete> 
     </completes> 
    </root> 

ヘルプは高く評価されます。

+0

あなたは「Completes'' '後の浮遊カンマを持っています。文字列を印刷した場合やSSMSでコピーした場合は、すぐに表示されます。 –

+0

@JeroenMostertコメントに追加すると、 'FOR XML PATH( '')'の前に空白を1つ空けてください – Amit

+0

あなたの助けに感謝しました!!! – user2897967

答えて

0

は、単純な何かを試してみてください:

 const string INPUT_FILENAME = @"c:\temp\test.xml"; 
     const string OUTPUT_FILENAME = @"c:\temp\test1.xml"; 
     static void Main(string[] args) 
     { 
      XmlReader reader = XmlReader.Create(INPUT_FILENAME); 

      XmlWriterSettings settings = new XmlWriterSettings(); 
      settings.Indent = true; 
      XmlWriter writer = XmlWriter.Create(OUTPUT_FILENAME, settings); 

      writer.WriteStartElement("root"); 

      while (reader.Read()) 
      { 
       writer.WriteRaw(reader.ReadOuterXml()); 
      } 
      writer.WriteEndElement(); 
      writer.Flush(); 
      writer.Close(); 


     } 
関連する問題