Создание SQL-запроса с помощью адаптера данных SQL? Генерация запроса из раздела конфигурации

Я не уверен, правильно ли я подхожу к этому, но я очень открыт и признателен за любые предложения.

Я строю диаграмму данных в базе данных SQL.

На диаграмме есть «Возраст» и «Процентиль», или это два поля, которые меня больше всего беспокоят.

У меня есть раздел конфигурации в моем файле web.config, который называется «Процентили». Это сделано для того, чтобы отображаемые процентили можно было определить в этом разделе конфигурации. Например:

<percentiles>
<add percentile="P50" visible="true">
<add percentile="P75" visible="true">
<add percentile="P85" visible="false">
<add percentile="P95" visible="true">
...
</percentiles>

Я проанализирую список процентилей и хотел бы либо отфильтровать свой набор данных, либо сгенерировать свой запрос на основе этого списка. Процентили хранятся в виде столбцов в базе данных. Так, например, я хочу, чтобы мой запрос выглядел так на основе этой конфигурации.

SELECT P50, P75, P95 FROM MyData

Теперь я полагаю, что могу просто выполнить SELECT * и удалить эти столбцы из моего набора данных или просто не добавлять их как «серии» в свою диаграмму. Тем не менее, я начинающий разработчик, стремящийся улучшить то, как я делаю вещи. По моему небольшому опыту, захват всех данных (хотя и небольшого количества) не является хорошей практикой.

Итак, вот где я прихожу к SQLDataAdapter. Можно ли построить мой запрос с помощью кода, чтобы включить только те столбцы, которые я хочу? Псевдокод, который мне интересно, возможен ли примерно так:

foreach(Percentile p in PercentileConfiguration)
{
    myDataAdapter.Select.Columns.Add(p.Percentile);
}

Хороший ли это подход? Любые и все предложения очень ценятся! Спасибо!


person BLT With Extra Mayo    schedule 26.10.2009    source источник


Ответы (2)


Я запутался. На первый взгляд кажется, что это вопрос исключительно о том, как запрашивать базу данных. И ответ на это заключается в том, что вы создаете команду SQL для этого. Я не могу понять, почему вы храните имена полей базы данных в файле web.config. Если вы хотите, чтобы запрос выглядел как «ВЫБЕРИТЕ P50, P75, P95 FROM MyData», то сделайте так.

person Mike Brind    schedule 26.10.2009

SELECT * .... работает немного медленнее, чем SELECT P50, P75 и т. д. Но незначительно. Если вы запускаете запрос только один раз (в отличие от нескольких раз в цикле или что-то в этом роде), и в вашей таблице нет большого количества столбцов или столбцов с огромными данными, то снижение производительности будет настолько номинальным, что усилия и усердие при выборе конкретных столбцов, вероятно, не будут стоить того. Кто-то однажды сказал мне, что если вам нужно выбирать между кодом, который читается (поддается сопровождению), и кодом, который будет работать на миллисекунду быстрее, выбирайте читаемый код.

Тем не менее, если вы собираетесь это сделать, вам просто нужно создать текст sql, а затем передать его вашему адаптеру.

Что-то типа:


StringBuilder columns = new StringBuilder();
foreach(Percentile p in PercentileConfiguration)
{
    if(columns.ToString().Length > 0) columns.Append(", ");
    columns.Append(p.Percentile);
}
string sql = string.Format("SELECT {0} FROM myTable", columns.ToString());
SqlDataAdapter da = new SqlDataAdapter(sql, connectionString);
...
...
...
person Mr Bell    schedule 04.11.2009