Я работаю над проектом ASP.NET с С# и Sql Server 2008.
У меня есть три таблицы:
Каждый пользователь имеет определенное значение для каждого поля данных, и это значение сохраняется в DataFieldsValues.
Теперь я хочу отобразить отчет, который выглядит так:
Я создал объекты User
и DataField
. В объекте DataField существует метод string GetValue(User user)
, в котором я получаю значение поля для определенного пользователя.
Затем у меня есть список Users List<User> users
и список DataFields List<DataField> fields
, и я делаю следующее:
string html = string.Empty;
html += "<table>";
html += "<tr><th>Username</th>";
foreach (DataField f in fields)
{
html += "<th>" + f.Name + "</th>";
}
html += "</tr>"
foreach (User u in users)
{
html += "<tr><td>" + u.Username + "</td>"
foreach (DataField f in fields)
{
html += "<td>" + f.GetValue(u) + "</td>";
}
html += "</tr>"
}
Response.Write(html);
Это отлично работает, но чрезвычайно медленнее, и я говорю о 20 пользователях и 10 полях данных. Есть ли лучший способ с точки зрения производительности для достижения этого?
EDIT: для каждого параметра внутри классов я извлекаю значение, используя следующий метод:
public static string GetDataFromDB(string query)
{
string return_value = string.Empty;
SqlConnection sql_conn;
sql_conn = new SqlConnection(ConfigurationManager.ConnectionStrings["XXXX"].ToString());
sql_conn.Open();
SqlCommand com = new SqlCommand(query, sql_conn);
//if (com.ExecuteScalar() != null)
try
{
return_value = com.ExecuteScalar().ToString();
}
catch (Exception x)
{
}
sql_conn.Close();
return return_value;
}
Например:
public User(int _Id)
{
this.Id = _Id
this.Username = DBAccess.GetDataFromDB("select Username from Users where Id=" + this.Id)
//...
}