【问题标题】:Display all rows returned by SQL query in a div在 div 中显示 SQL 查询返回的所有行
【发布时间】:2011-07-26 07:57:45
【问题描述】:

我正在尝试使用InnerHTML 将我的SQL 查询结果输出到div。但我最多只能显示一张唱片。如何使我的所有记录都显示在DIV 中?在我的页面上,DIV 包含在 UpdatePanel 中,即使查询返回多行,我也只显示 1 行。

string sql = "Select * From Events";
SqlCommand command = new SqlCommand(sql, conn);
command.CommandType = CommandType.Text;
conn.Open();
reader = command.ExecuteReader();
while (reader.Read())
{
    divout1.InnerHtml += "Name: " + reader["Name"].ToString() + "<br />" +
        "Date: " + reader["Date"].ToString() + "<br />" +
        "Location: " + reader["Location"].ToString() + "<br />";
    divout.Visible = true;
}

【问题讨论】:

  • 是否有机会显示 divout 而不是 divout1?
  • 这不是问题,但是您需要先从数据库中转义字符串,然后再将它们放入 div。

标签: c# asp.net sql innerhtml


【解决方案1】:

嗯,乍一看,除非您的查询只返回一行,否则它应该获取您 div 上的所有数据。

尝试在你的 while 语句的最后一个括号上放一个断点,看看第一次迭代后你的 div 上会发生什么。

对于其他方式,尝试将 div 移出更新面板,看看会出现什么?

【讨论】:

    【解决方案2】:

    为什么不用StringBuilder来构建你的sql,然后输出StringBuilder的内容:

    StringBuilder sb = new StringBuilder(1024);
    string sql = "Select * From Events";
    SqlCommand command = new SqlCommand(sql, conn);
    command.CommandType = CommandType.Text;
    conn.Open();
    reader = command.ExecuteReader();
    
    while (reader.Read())
    {
        sb.AppendLine("Name: " + reader["Name"].ToString() + "<br />" +
            "Date: " + reader["Date"].ToString() + "<br />" +
            "Location: " + reader["Location"].ToString() + "<br />");
    }
    
    if(sb.Length > 0) {
        divout.InnerHtml = sb.ToString();
        divout.Visible = true;
    }
    

    【讨论】:

      【解决方案3】:

      为什么不尝试这样的事情,可能是 InnerHtml 内部的连接搞砸了或其他什么。还要确保你真的有不止一排。

          var sb = new StringBuilder();  
          var formatString = "Name: {0} <br />Date: {1}<br />Location: {2}<br />"; 
          while (reader.Read())
          {
              sb.AppendFormat(formatString, reader["Name"].ToString(), reader["Date"].ToString(), reader["Location"].ToString());
          }
          divout1.InnerHtml = sb.Tostring();
          divout1.Visible = true;
      

      【讨论】:

        【解决方案4】:

        试试:

                    string sql = "Select * From Events";
                    SqlCommand command = new SqlCommand(sql, conn);
                    command.CommandType = CommandType.Text;
                    conn.Open();
                    reader = command.ExecuteReader();
                    string s = string.Empty;
                    while (reader.Read())
                    {
                        s += "Name: " + reader["Name"].ToString() + "<br />" +
                            "Date: " + reader["Date"].ToString() + "<br />" +
                            "Location: " + reader["Location"].ToString() + "<br />";
        
                    }
                    divout1.innerHtml = s;
                    divout1.Visible = true;
        

        【讨论】:

        • 虽然使用 StringBuilder 更好
        【解决方案5】:

        您可能应该对来自数据库的字符串进行编码,因为您直接将其作为原始 HTML 输出。

        divout1.InnerHtml += "Name: " + Server.HtmlEncode(reader["Name"].ToString()) + "<br />" 
                           + "Date: " + Server.HtmlEncode(reader["Date"].ToString()) + "<br />"  
                           + "Location: " + Server.HtmlEncode(reader["Location"].ToString()) + "<br />";
        

        见HttpServerUtility.HtmlEncode

        【讨论】:

          猜你喜欢
          • 2019-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-31
          相关资源
          最近更新 更多