2011-05-15 56 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