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

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

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

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

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

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

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

SELECT P50, P75, P95 FROM MyData

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 05 ноября 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);
...
...
...
0 голосов
/ 26 октября 2009

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

...