2012-01-24 2 views
1

Далее будет просто распечатать 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(); 
       } 
      } 
     } 
    } 
} 

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

ответ

4

Здесь:

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

Поместите вызов Read в время цикла:

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

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

+0

Не совсем уверен, что вы имеете в виду последнее предложение о горизонтальных срезах? – oshirowanen

+1

@ishirowanen ответ обновлен. –