Как проверить на наличие данных в nuare? - PullRequest
0 голосов
/ 11 февраля 2011

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

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

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

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

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

Я пробовал следующее:

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

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

Как проверить перезапуск DataReader для null?

Ответы [ 5 ]

5 голосов
/ 11 февраля 2011

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

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

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

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

if (dbReader.HasRows) {....}
4 голосов
/ 11 февраля 2011

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

4 голосов
/ 11 февраля 2011

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

2 голосов
/ 11 февраля 2011

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

0 голосов
/ 11 февраля 2011

Итак, в общем, вы хотите знать, возвращает ли

SELECT SwitchRoom.ModifiedID
FROM SwitchRoom
WHERE SwitchRoomID = @ChkSwitchRmID

какие-либо записи?

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

if  (!dbReader.Read())
{
    // execute procedure
}
else
{
    // error
}
...