2011-09-01 2 views
0

데이터 집합에서 데이터를 가져 와서 XML 파일을 출력하려고합니다. 그러나 xml 파일은 항상 비어 있습니다. 내 코드에서 오류를 찾도록 도와 주시겠습니까?왜 출력 XML 파일이 비어 있습니까?

class Program 
{ 
    static void Main(string[] args) 
    { 
     string umail = ""; 
     XDocument loaded = XDocument.Load(@"C:\1.xml"); 

     var q = from c in loaded.Descendants("AdminUserDB.dbo.U_User") 
       select (string)c.Element("URI"); 

     foreach (string em in q) 
      umail = em; 

     SqlConnection cn = new SqlConnection("server=(local);database=AdminUserDB;Persist Security Info=True; uid=sa;[email protected]"); 
     cn.Open(); 

     DataSet ds = new DataSet(); 

     SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM dbo.U_User WHERE [email protected]", cn); 

     da.SelectCommand.Parameters.AddWithValue("@umail", umail); 

     da.Fill(ds); 

     string filename = "output.xml"; 

     System.IO.FileStream myFileStream = new System.IO.FileStream(filename, System.IO.FileMode.Create); 

     System.Xml.XmlTextWriter myXmlWriter = new System.Xml.XmlTextWriter(myFileStream, System.Text.Encoding.Unicode); 

     ds.WriteXml(myXmlWriter); 

     myXmlWriter.Close(); 

     cn.Close(); 

    } 
} 

} 내가 직접하지만, 내가 참조해야하는 네임 스페이스를 찾을 수 없습니다 DataSet.WriteXml 방법을 사용하려고

. MSDN에서 WriteXml을 검색했지만 WriteXml 메서드 페이지에 나열된 System.Data.DataSet 네임 스페이스를 찾을 수 없습니다.

감사

SUT는

+0

질문 : SQL Server에서 직접 선택한 쿼리 스크립트를 시도했지만 올바른 쿼리 결과를 얻을 수있었습니다. – SUT

+0

연결 문자열이 유효하지 않기를 바랍니다 :) –

+0

'XmlTextWriter' 대신'XmlWriter'를 사용해 보셨습니까? XmlTextWriter를 사용하는 DataSet.WriteXml에 대한 오버로드가 표시되지 않습니다. – Tim

답변

2

코드가 리소스를 유출하고 있으며, 항상 일회용 개체를 즉시 처리하십시오. 그렇지 않으면 파일을 잠긴 상태로두고 리소스를 소비하게됩니다. 닫기는 Dispose를 호출하지 않습니다.

DataSet ds = new DataSet(); 

using(SqlConnection cn = new SqlConnection("server=(local);database=AdminUserDB;Persist Security Info=True; uid=sa;[email protected]")) 
{ 
    cn.Open(); 

    using(SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM dbo.U_User WHERE [email protected]", cn)) 
    { 
     da.SelectCommand.Parameters.AddWithValue("@umail", umail); 
     da.Fill(ds); 
    } 
} 

string filename = "output.xml"; 

using(FileStream myFileStream = new FileStream(filename, FileMode.Create)) 
{ 
    using(XmlTextWriter myXmlWriter = new XmlTextWriter(myFileStream, Encoding.Unicode)) 
    { 
     ds.WriteXml(myXmlWriter); 
    } 
} 

만약 당신이 아직 데이터가 확률값 없다 아무것도 표시되지 않는 당신의 스트림에 처분 호출 한 후.

+0

답변 해 주셔서 감사합니다. 귀하의 방법을 시도했지만 새로운 XML은 속성 만 가지고 있습니다. 데이터 집합에 실수가 있다고 생각합니다. 그러나, 내가 선택 쿼리 스크립트와 데이터베이스를 확인, 잘 작동합니다. – SUT

+0

'da.Fill (ds)'다음에 중단 점을 놓고 데이터가 들어 있는지 확인하십시오. – TheCodeKing

+0

비어있는 것 같습니다 ... – SUT

5

당신은 Flush 메소드를 호출 할 필요가 있습니다.

+0

myXmlWriter.Flush()를 의미합니까? 시도했지만 XML 파일이 여전히 비어 있습니다. – SUT

+0

FileStream 클래스. –

+0

스트림을 닫거나/폐기하면 flush가 호출됩니다. – TheCodeKing

관련 문제