2013-06-11 7 views
0

여러 테이블에서 '일부'SQL 데이터를 검색하고 XML 형식의 파일에 저장하는 함수를 작성하려고합니다. 문자열 목록에서xml 형식의 파일에 데이터 저장

  • 데이터를 저장,

  • ,

  • 데이터를 검색,

    • SQL 문 - : 나는 C#을 함께 할 경우

      , 그것은 단순하게하다

    • 다음 WriteXml (xmlFile, 데이터가 저장되는 변수) ??

    어느 한 나에게 예를 게재 할 수 있습니까?

    내가보고 있었다

    : - 나는 살펴보고해야 할 일을 할 수 xmlSerialization, 또한

    string xmlFile = Server.MapPath("Employees.xml"); 
    
    ds.WriteXml(xmlFile, XmlWriteMode.WriteSchema); 
    

    C#에서

    되는 WriteXml()와 WriteXmlSchema() 함수 것인가?

    샘플 SQL 쿼리.

    SqlConnection Connection1 = new SqlConnection(DBConnect.SqlServerConnection); 
         String strSQL1 = "SELECT xxx.MEMBERKEY, xxx.MEMBID, xyz.HPCODE, convert(varchar, OPFROMDT, 101) as OPFROMDT" 
          + ", convert(varchar, OPTHRUDT, 101) as OPTHRUDT FROM [main].[dbo].[yyy] INNER JOIN [main].[dbo].[xxx] ON xxx.MEMBERKEY = yyy.MEMBERKEY " 
          + "and opthrudt >= opfromdt INNER JOIN [main].[dbo].[xyz] ON yyy.HPCODEKEY = xyz.HPCODEKEY where MembID = @memID"; 
    
    
         SqlCommand command1 = new SqlCommand(strSQL1, Connection1); 
         command1.Parameters.AddWithValue("@memID", memID); 
         SqlDataReader Dr1; 
         Connection1.Open(); 
         Dr1 = command1.ExecuteReader(); 
    
         while (Dr1.Read()) 
         { 
          HPCODEs.Add((Dr1["HPCODE"].ToString()).TrimEnd()); 
          OPFROMDTs.Add((Dr1["OPFROMDT"].ToString()).TrimEnd()); 
          OPTHRUDTs.Add((Dr1["OPTHRUDT"].ToString()).TrimEnd()); 
         } 
         Dr1.Close(); 
    
  • 답변

    1

    이렇게 많은 접근법이 있습니다.

    하나는 시간을 투자하고 XML 기능으로 작성된 SQL을 사용하여 XML 문서를 직접 쿼리하고 가져 와서 바로 파일로 직렬화 할 수 있습니다. 아주 기본적인 예제는 here입니다. 그럼 당신은 아마 또 다른 옵션은 DTO (데이터 전송 객체)로 SQL 데이터 판독기에서 읽을 수있다이

    SqlDataReader r = cmd.ExecuteReader(); 
    SqlXml data = r.GetSqlXml(0); 
    XmlReader xr = data.CreateReader(); 
    

    같이하여 DataReader의 GetSqlXml 방법, 무언가를 사용합니다. 이것은 아마도 실제로 시도 된 방법 일 것입니다. DTO 목록을 얻으면 .NET 직렬화 (DataContractSerializer)를 사용하여 XML로 직렬화 할 수 있습니다.

    +0

    기본 'for xml auto'명령은 여러 테이블 조인과 함께 효율적으로 작동합니까? – Philo

    +0

    이 나를 때려 눕히고, 나는 DBA가 아닙니다 .--)하지만 제 생각에 직렬화의 오버 헤드가 추가되어 동일하게 작동합니다. 실행 계획을보고 xml auto가없는 경우와 비교하십시오. –

    0

    내가보기 엔이 같은 도구를보고 추천합니다 : 당신은 당신이 만들려고하는 XML 출력의 XSD가있는 경우이 당신을 위해 .NET 클래스를 생성합니다

    http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.80).aspx

    .

    어느 쪽이든, 데이터를 POCO 스타일 클래스에 드롭하고 XML로 직렬화하는 것은 XmlWriter를 직접 사용하는 것보다 훨씬 낫습니다.

    +0

    약 http://msdn.microsoft.com/en-us/library/ms178107.aspx – Philo

    +0

    이전에 'FOR XML'을 사용한 적이 없습니다. .NET 코드가 실행되는 곳과는 달리 SQL Server에서 실행됩니다. 어쨌든 나는 괜찮을거야. POCO/XmlSerializer를 사용하면 XML이 어떻게 작성되는지 매우 유연하게 이해할 수 있습니다. – Jay