2011-02-10 4 views
0

У меня есть страница aspx, которая позволяет пользователю вводить измененные записи в базу данных, но когда пользователь нажимает Submit, чтобы запустить хранимую процедуру, я хочу сначала запустить проверку, чтобы увидеть, существует ли модифицированная строка с тем же отношением.Как проверить datareader на null?

Я передаю результаты следующего запроса:

SELECT SwitchRoom.ModifiedID FROM SwitchRoom WHERE 
    SwitchRoomID = @ChkSwitchRmID", constring; 

в DataReader, чтобы определить, является ли эта связь существует.

Мне нужно это, чтобы определить, возвращает ли читатель NULL, чтобы разрешить выполнение процедуры, если это не так, а затем не позволяют пользователю сохранять информацию.

Я попытался следующие:

if (dbreader = NULL) 
{ 
Fire Procedure 
} 
else 
{ 
"Error Message" 
} 

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

Как проверить остатки DataReader на null?

ответ

4

Попробуйте if (!dbReader.Read() || dbreader.IsDbNull(field)} { .. }

+0

Фантастический! Просто попробовал это, и это сон. Спасибо за ввод. –

4

Ридер не будет возвращать нулевой объект, чтобы выяснить, если читатель возвращается ни одной строки, вы можете использовать if(dbreader.Read())

5

Я предпочитаю использовать ExecuteScalar с запросом, который подсчитывает совпадающие строки:

"SELECT count(*) FROM SwitchRoom WHERE SwitchRoomID = @ChkSwitchRmID" 

Затем сравните результат выполнения скаляра с нулем. Нет нулевой проверки.

Если вы действительно хотите использовать метод чтения, вы можете использовать следующее свойство, чтобы проверить, есть ли у него какие-либо строки. Объект не будет пустым, даже если он ничего не возвращает.

if (dbReader.HasRows) {....} 
2

Вы ищете тип DBNull. Базы данных не отправляют фактические нулевые ссылки, они отправляют специальный тип данных в C# для представления значения NULL базы данных.

0

Так в принципе, вы хотите знать, если

SELECT SwitchRoom.ModifiedID 
FROM SwitchRoom 
WHERE SwitchRoomID = @ChkSwitchRmID 

возвращает какие-либо записи?

Читатель никогда не будет нигде недействителен. Вместо этого вам нужно проверить, что читатель не содержит записей для чтения.

if (!dbReader.Read()) 
{ 
    // execute procedure 
} 
else 
{ 
    // error 
} 
Смежные вопросы