Как работает дизайнер набора данных Visual Studio при создании адаптера таблицы на основе процедуры

Мне нужно обновить адаптер таблицы набора данных в Visual Studio 2010. Он основан на хранимой процедуре. Процедура магазина имеет параметры

    @IDportfolio INT
,   @Date varchar(50)           = NULL
,   @IDorder int                = NULL
,   @IDsession nvarchar(300)    = NULL
,   @User varchar(100)          = NULL
,   @UDNsXML NVARCHAR(MAX)      = NULL
,   @DEBUG  INT                 = 0

Настольный адаптер имел следующие методы:

Fill,GetData (@IDportfolio, @Date, @IDorder, @IDsession, @User, @UDN)

Поэтому мне нужно было обновить его. В процедуре есть один оператор IF, который выполняется только в том случае, если для @DEBUG установлено значение 1. Внутри этого оператора IF есть несколько операторов SELECT, используемых для внутренней отладки. Значение 1, очевидно, не является значением по умолчанию, как видно из сигнатуры, однако при обновлении методов конструктор действует так, как будто он отправляет значение 1 для параметра @DEBUG. Таким образом, вместо возврата значений, которые должны быть возвращены, он возвращает неправильный набор значений, и дизайнер пытается создать методы на основе этих возвращаемых значений.

Почему дизайнер работает так и есть ли какое-то значение по умолчанию для параметров INT, или он игнорирует значения по умолчанию? Я также заметил подобное поведение в Entity Framework.

1 ответ

Решение

Хорошо, разработчик (VS) должен определить отправленные значения (параметры) и возвращаемые значения (столбцы и типы данных). (для генерации связанных классов). Он использует то, что можно было бы условно назвать отражением. Чтобы сделать это, хранимая процедура должна соответствовать определенным правилам, я обнаружил 4, из головы, вот важные 3:

  • Может быть возвращен только один набор строк (это где-то явно указано MS)
  • Набор строк должен быть постоянным вне хранимой процедуры, т. Е. Он не может быть получен из табличной переменной. (это где-то явно указано MS)
  • Это должно быть детерминированным. (это где-то явно указано MS)

Использование параметра отладки, который вызывающий софтвер никогда не установит в 1, позволит вам запустить процедуру для тестирования и вернуть различные значения в разные моменты хранимой процедуры. Однако для дизайнера VS, поскольку эти строки (по умолчанию) не возвращаются, процесс все равно будет вести себя при анализе VS.

Другие вопросы по тегам