Распечатать много строк из читателя - PullRequest
1 голос
/ 24 января 2012

Следующая команда просто распечатает 1 строку из базы данных

public partial class Default : System.Web.UI.Page
{
    SqlConnection connection;
    SqlCommand command;
    SqlDataReader reader;

    protected void Page_Load(object sender, EventArgs e)
    {
        using (connection = new SqlConnection(ConfigurationManager.AppSettings["connString"]))
        {
            using (command = new SqlCommand("select col1, col2 from table1 where id = @id", connection))
            {
                command.Parameters.Add("@id", SqlDbType.Int, 3).Value = 1;
                connection.Open();

                using (reader = command.ExecuteReader())
                {
                    reader.Read();
                    Div1.InnerHtml = reader["col1"].ToString();
                }
            }
        }
    }
}

Что нужно сделать здесь, чтобы распечатать все возвращенные строки?

Ответы [ 2 ]

4 голосов
/ 24 января 2012

Здесь:

using (reader = command.ExecuteReader())
{
    var sb = new StringBuilder();
    while (reader.Read())
    {
        sb.Append(reader["col1"].ToString());
    }
    Div1.InnerHtml = sb.ToString();
}

Кроме того, поскольку вы создаете экземпляры объектов подключения внутри метода, вам не нужно создавать их как частные поля:

public partial class Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        using (var connection = new SqlConnection(ConfigurationManager.AppSettings["connString"]))
        using (var command = new SqlCommand("select col1, col2 from table1 where id = @id", connection))
        {
            command.Parameters.Add("@id", SqlDbType.Int, 3).Value = 1;
            connection.Open();

            using (var reader = command.ExecuteReader())
            {
                var sb = new StringBuilder();
                while (reader.Read())
                {
                    sb.Append(reader.GetString(reader.GetOrdinal("col1")));
                }
                Div1.InnerHtml = sb.ToString();
            }
        }
    }
}
2 голосов
/ 24 января 2012

Поместите вызов Read в цикл while:

using (var reader = command.ExecuteReader())
{
   var builder = new StringBuilder();
   while (reader.Read()) 
   {
     builder.Append(reader["col1"].ToString());
   }
   Div1.InnerHtml = builder.ToString();
}

Кроме того, у вас, похоже, есть файл позади файла, главной задачей которого должна быть страница, обращающаяся к базе данных.Возможно, вы захотите изучить твердые принципы при разработке классов.В этом случае нарушается принцип единой ответственности.Следование этим принципам способствует удобству сопровождения, повторному использованию кода и упрощает рефакторинг.

...