2011-05-15 80 views
0

我在我的.ashx頁面中嘗試了它,但是在myXMLHttpRequest.status中出現錯誤500,我無法理解問題出在哪裏。生成簡單xml的簡單代碼將非常好。像:我怎樣才能使用xmlTextWriter在.ashx中爲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

您能與我們分享您嘗試的解決方案嗎? – 2011-05-15 10:40:09

回答

0

不要有機會到Visual Studio現在這樣算下來,從頭部的頂部。應該以你爲出發點。

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]。事件強硬,這可能technicly是正確的,我會建議你使用類似以下的更安全的方法:

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

這將確保你將永遠從查詢中獲取所需的字段。即使將來您決定更改數據庫模式以添加更多列。

+0

在你的代碼中(context.Response.ResponseStream)我的visual studio中的ResponseStream是未知的!你的意思是OutputStream? – biglibigli 2011-05-15 12:30:06

+0

這是很好的問題解決;) – biglibigli 2011-05-15 13:31:29