TableAdapter возвращает фантомные результаты в ASP.NET

У меня есть TableAdapter, который извлекает строки из хранимой процедуры. По какой-то причине при отсутствии результатов TableAdapter возвращает INT со значением 0 вместо NULL. Хранимая процедура имеет NOCOUNT ON.

Проблема в том, что у меня есть ListView во внешнем интерфейсе с EmptyDataTemplate, который не отображается. Когда я выполнил запрос в Query Analyzer, я увидел, что он возвращает 0 вместо NULL.

Хранимая процедура имеет простой «SELECT * FROM WHERE» с одним параметром INT (НЕ выходным). Запустив его в Query Analyzer, я не получаю никаких результатов, как и ожидалось.

Что происходит?


person Donnie Thomas    schedule 03.07.2009    source источник


Ответы (2)


Проверьте свойство ExcuteMode tableAdapter для запроса. Убедитесь, что он установлен на «Чтение». Есть 3 варианта ExecuteMode:

  1. Читатель — возвращает строки данных
  2. Скаляр — возвращает одно значение
  3. NonQuery — возвращает целое число с количеством затронутых строк.

Также проверьте коллекцию параметров на наличие параметра возвращаемого значения. У него должны быть свойства AllowDBNull (true, если разрешены нули), Direction (ReturnValue). Этот параметр должен содержать результаты вашего SP. В вашем примере это будет нуль, так как не было возвращено ни одной записи.

person Drell    schedule 27.08.2009

Похоже, хранимая процедура возвращает результат. Все хранимые процедуры возвращают код результата. Скорее всего это.

person Johnno Nolan    schedule 03.07.2009
comment
На самом деле, я убедился, что это не так. Выполнение запроса в Query Analyzer не дало никаких результатов, и, аналогично, выполнение других моих SP, которые не дали никаких результатов в конструкторе наборов данных, не привели к этому фантомному результату. - person Donnie Thomas; 04.07.2009
comment
Если вы берете свою хранимую процедуру в Sql Server Management Studio и выбираете выполнение в новом окне, она показывает, что она возвращает @rc. Это всегда 0, если sproc работает, и вы его не меняете. Это может быть совпадением. - person Johnno Nolan; 04.07.2009
comment
Хорошо, вы правы - это так. Однако, если это так, будут ли все SP возвращать 0 в конструкторе набора данных, когда у них нет результатов? Кажется, этого не происходит. И что действительно расстраивает, так это то, что мой ListView не распознает отсутствие результатов. Есть мысли о том, что может происходить? - person Donnie Thomas; 04.07.2009