2011-05-15 5 views
0

내 .ashx 페이지에서 그것을 시도하지만, 나는 myXMLHttpRequest.status에서 500 오류가있어 내가 어디서 문제인지 이해할 수 없다. 간단한 XML을 생성하는 간단한 코드는 매우 유용 할 것입니다. 같은 : 여기 @어떻게 내가 .ashx에서 XmlTextWriter와 myXMLHttpRequest.responseXML에 대한 xml을 만들 수 있습니다.

<properties> 
<property> 
    <address>812 Gwyn Ave</address>  
</property> 
<property> 
    <address>3308 James Ave S</address>  
</property> 
</properties> 

내 솔루션 (SQL 코드는 잘 작동)입니다 :

public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Clear();    
     context.Response.ContentType = "text/xml"; 
     XmlTextWriter writer = new XmlTextWriter(); 
     string user_id = context.Request.Params["user_id"];   

     string connectionString = ("Data Source=.;Initial Catalog=user_city;Integrated Security=True"); 
     string queryString = "select * from city_buildings where user_id=" + user_id + ";"; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     {     
      SqlCommand command = new SqlCommand(queryString, connection); 
      connection.Open(); 
      SqlDataReader reader = command.ExecuteReader(); 
      writer.WriteStartDocument(); 
      try 
      {    
       writer.WriteStartElement("buildings"); 
       while (reader.Read()) 
       {       
        writer.WriteStartElement("building"); 

         writer.WriteElementString("user_id",Convert.ToString(reader[0])); 

        writer.WriteEndElement(); 

       } 
       writer.WriteEndElement(); 
       writer.WriteEndDocument(); 
       writer.Flush(); 
       writer.Close(); 
      } 
      finally 
      {     
       reader.Close(); 
      } 
     } 
    } 
+0

시도한 해결책을 우리와 공유 할 수 있습니까? –

답변

0

그나마 그렇게 머리의 꼭대기에서이 일을 지금 비주얼 스튜디오에 액세스 할 수 있습니다. 5 점을 출발점으로 삼아야합니다.

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "text/xml"; 

    using (XmlWriter writer = XmlWriter.Create(context.Response.OutputStream)) 
    { 
     writer.WriteStartDocument(); 
     // do xmlwriter stuff here. 
     writer.WriteEndDocument(); 
    } 
} 

는 업데이트 :

난 정말이 OutputStream에 넣어 뜻 않았다. 이를 반영하기 위해 예제를 업데이트했습니다.

간단히 코드를 살펴 보았습니다. xmlwriter의 결과를 HttpResponse에 출력하지 않는 것을 볼 수 있습니다. (내 예제가 Context.Response.OutputStream에 바인딩하여 수행하는 작업) 작동하지 않는 이유가되어야합니다. 왜 500 오류가 발생하는지 알지 못합니다. 어쩌면 Visual Studio에서 실행하여 오류가 발생하는지 확인해야합니다.

나는 또한 reader[0]을 사용하는 것으로 나타났습니다. 이것은 당신은 항상 쿼리에서 원하는 필드를 얻을 것이다 보장합니다

int fieldIndex = reader.GetOrdinal("address"); 
reader.GetString(fieldIndex); 

이벤트는 힘든이 technicly 정확한 수 있습니다 난 당신이 다음과 같은 안전한 방법을 사용하는 것이 좋습니다 것입니다. 나중에 데이터베이스 스키마를 변경하여 더 많은 열을 추가하기로 결정한 경우에도 마찬가지입니다.

+0

(context.Response.ResponseStream) 내 Visual Studio에서 ResponseStream을 알 수 없습니다! OutputStream을 의미합니까? – biglibigli

+0

좋은 문제가 해결되었습니다.) – biglibigli