2012-07-11 5 views
0

XML을 반환하는 저장된 proc가 있습니다. MS SQL Management Studio에서 실행할 때 제대로 작동합니다. proc를 실행하고 결과 XML을 가져 와서 파일에 쓰려면 C# 코드를 작성해야합니다. 코드를 작성하고 proc (프로파일 러를 사용하여 검사 한)을 실행하며 오류는 없지만 XmlReader는 비어 있습니다. 내 코드는 무엇인가 같다 : 나는 1 시저가 생성하는 XML을 포함하는 일반 문자열을 반환하는 2 저장된 프로 시저를 만든 비교 테스트로SQL Server에서 null 결과 얻기 XML을 반환하는 proc stored

using (SqlConnection c = new SqlConnection(-snip-)) 
{ 
c.Open(); 
SqlCommand myCommand = new SqlCommand("sp_formfill_contract_xml", c); 

myCommand.CommandType = CommandType.StoredProcedure; 
myCommand.Parameters.AddWithValue("@i_contract_id", frm_contract_id.Text.ToString());      

System.Xml.XmlReader xmlr = myCommand.ExecuteXmlReader(); 
xmlr.Read(); 


while (xmlr.ReadState != System.Xml.ReadState.EndOfFile) 
    { 
    MessageBox.Show(xmlr.ReadOuterXml()); 
    // do stuff with the XML snippet here 
    } 

    c.Close(); 
    } 

및 C# 코드는 수신 잘, 너무 오래로 나는 XML 리더를 사용하지 않는다. 따라서 XML proc이 반환하는 데이터의 종류와 관련이있어서 비어있는 것처럼 보입니다.

아이디어가 있으십니까? -Sean

+0

어떤 버전의 sql-server? 선택으로 XML로 돌아오고 있습니까? http://www.mssqltips.com/sqlservertip/1077/returning-xml-result-sets-with-sql-server/ 또는 일반 텍스트 (varchar)로 표시합니까? –

답변

0

내 유일한 추측이 작동해서는 안되는 이유를 알지 못합니다. 한 행을 가져야하고 xmlr.Read(); 그래서 아래의 방법을 시도하십시오

using(System.Xml.XmlReader xmlr = myCommand.ExecuteXmlReader()) 
{ 
while xmlr.Read()) 
{ 
    MessageBox.Show(xmlr.ReadOuterXml()); 
} 
} 
+0

감사. 나는 당신의 제안을 시도했지만 같은 결과를 얻었다. 적어도 while()은 true로 평가되지 않으므로 Read는 EOF를 반환해야합니다. 난 XML로 멋진 일을하려고하지 않고 단지 String이나 파일에 저장하여 기존 XML 파일의 내용을 덮어 쓸 수 있기를 원합니다. 메모리에서 XML을 분석 할 계획이 아닙니다. 아마이 일을하는 더 좋은 방법이 있을까요? 예를 들어 결과를 문자열로 반환하도록 SQL Server에 지시 할 수있는 방법이 있는지 알고 계십니까? – user1517963

+0

당신은 SQL에서 다음과 같이 CONVERT (VARCHAR (100), @xml, 1)와 같이 xml을 sql으로 변환 할 수 있습니다. 만약 당신이 무엇인지 그 후 – HatSoft

+0

다시 한번 감사드립니다. 나는 그것을 시도했다. 하지만 아무런 차이가 없었습니다. 난 당황해! 내가 코딩 한 또 다른 proc은 하드 코드 된 XML을 반환하지만, 'FOR XML'절을 사용하는이 proc은 결과를 VARCHAR로 변환하여 다시 전달하기 전에 작동하지 않는다. – user1517963

관련 문제