Показать все строки, возвращенные SQL-запросом в div - PullRequest
2 голосов
/ 30 марта 2011

Я пытаюсь вывести результат моего SQL-запроса на div, используя InnerHTML.но я не могу получить больше одной записи для показа.Как мне сделать так, чтобы все мои записи отображались в 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;
}

Ответы [ 5 ]

1 голос
/ 30 марта 2011

Почему бы не попробовать что-то подобное, может быть конкатенация внутри 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;
1 голос
/ 30 марта 2011

Ну, на первый взгляд, если ваш запрос не возвращает только одну строку, он должен получить все данные вашего div.

попытайтесь поставить точку останова на последней скобке вашего оператора while и посмотрите, что произойдет с вашим div после первой итерации.

для другого способа, попробуйте вывести div из панели обновления, чтобы посмотреть, что появляется?

1 голос
/ 30 марта 2011

Почему бы не использовать 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;
}
0 голосов
/ 30 марта 2011

Вам, вероятно, следует кодировать строки, поступающие из базы данных, поскольку вы выводите их напрямую в виде необработанного 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

0 голосов
/ 30 марта 2011

Попробуйте:

            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;
...