2012-08-11 1 views
1

У меня проблема. У меня есть 2 запроса в хранимой процедуре. Оба выполняются при определенном условии, если условие является истинным запросом, который выполняется, и возвращает 7 столбцов из 3 таблиц. Если условие не выполнено, второй запрос возвращает 4 столбца.Как найти значение столбца в таблице данных в C#?

На переднем конце я использую datatable для хранения результата запроса. Я назначаю значения для текстового поля из datatable.

как

DT является имя таблицы данных

Txt_name.Text=dt.Rows[0][6].ToString(); 

проблема заключается в том, что, когда второй запрос выполняется происходит ошибка. Столбов нет на 6.

Как я нахожу, у dt есть столбец по индексу 6 или нет?

+0

Использование порядковые очень плохой форме. Именованные столбцы гораздо более масштабируемы. –

ответ

2

Попробуйте этот код

int indx = 6; 
if(dt != null and dt.Columns.Count > indx) 
{ 
    Txt_name.Text=dt.Rows[0][indx].ToString(); 
} 
1

Вы можете проверить colums рассчитывать что-то, как показано ниже:

int index = 6; 
Txt_name.Text = dt.Columns.Count > index ? dt.Rows[0][index].ToString() : String.Empty; 
0

У Вас есть доступ, чтобы изменить хранимую процедуру? А также управлять всеми ресурсами, которые используют эту хранимую процедуру? Я бы рекомендовал, чтобы он возвращал ту же структуру независимо от результата.

Если есть ложный результат, просто добавьте дополнительные поля. Это можно сделать с помощью оператора COALESCE, который возвращает заданное значение (как '' в случае пустой строки), если существует NULL (т. Е. Нет записей в объединенной таблице).

Функция, которая ведет себя по-разному на основе полей, будет почти работает как страховка, чтобы сломать код в будущем. Будет магическое число «6», которое может привести к поведению if-else-clause инвертировать или всегда оценивать тот же результат. Если хранимая процедура HAVE возвращает разных структур, сначала оцените true/false, а затем вызовите соответствующую хранимую процедуру .

Смежные вопросы