Как корректно извлечь данные?
От: atlant83  
Дата: 14.02.10 11:52
Оценка:
Здравствуйте.
Разрабатываю приложение в среде VS, язык С#, встраиваемая база данных Firebird Embedded.
Необходимо извлечь данные из таблицы БД. Структура БД подразумевает, что для поля SAMPLE_NAMEID (идентификатор наименования образца) таблицы SAMPLELIST существуют 4 справочника для извлечения наименования образца. Выбор справочника зависит от значения поля SAMPLELIST.SAMPLE_TYPE. Обычно при извлечении данных таблицы SAMPLELIST значение поля SAMPLE_TYPE известно и формирование запроса происходит динамически. Т.е. в зависимости от значения SAMPLE_TYPE инициализируются строковые переменные
switch (SAMPLE_TYPE)
{
    case 0:
        SampleNameIdJoin = . . .
        SampleNameIdTable = . . .
        break;
. . .
}

которые затем вставляются в основной текст запроса (SelectCommand.CommandText).
Но, в некоторых случаях возникает ситуация когда значение поля SAMPLELIST.SAMPLE_TYPE заранее неизвестно, но есть значение поля SAMPLELIST. CONTRACTID согласно которому необходимо извлечь записи из таблицы SAMPLELIST. Каким образом можно осуществить эту операцию наиболее корректно (учитывая скорость выполнения этой операции ). Возникли такие вопросы:
1) Обязательно ли в этом случае использовать цикл в котором, по ранее извлеченным значениям SAMPLELIST.SAMPLE_TYPE (например, запрос вернул массив из трех значений SAMPLE_TYPE для SAMPLELIST. CONTRACTID = 2) формируем динамически текст запроса, аналогично следующему варианту
for (для всех извлеченных значений SAMPLE_TYPE)
{
//1 - Инициализируем переменные в зависимости от конкретного SAMPLE_TYPE
switch (SAMPLE_TYPE)
{
    case 0:
        SampleNameIdJoin = . . .
        SampleNameIdTable = . . .
        break;
. . .
}
//2 - Создаем текст запроса (SelectCommand.CommandText) используя проинициализированные выше переменные.
//3 - Выводим полученные данные в DataGridView
}

2) Возможно ли в одном тексте запроса сконструировать подобную логику извлечения данных или, возможно, есть более простой вариант извлечения данных чем описанный в вопросе №1?
3) Где лучше прописать эту логику извлечения данных — в хранимой процедуре (вызываемой затем из приложения) или в отдельной функции приложения?
Спасибо всем ответившим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.