Передача автоматически увеличенного идентификатора через несколько форм - PullRequest
0 голосов
/ 14 июня 2011

Нужен совет о том, как лучше всего сделать так, чтобы автоматически увеличивающийся идентификатор был одинаковым в нескольких формах.

В основном я использую VB .Net с SQL Server в качестве бэкэнда. Я написал несколько хранимых процедур для вставки данных, а затем вызываю хранимые процедуры в интерфейсе. У меня есть 3 формы, и как только первая форма отправлена, она генерирует autoID и затем переводит пользователя во 2-ю форму.

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

Я читал о @@Identity, но он захватывает только идентификатор в этом сеансе, поскольку я отправляю данные первых форм, а затем перехожу ко второму, не будет ли это другим сеансом.

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 июня 2011

Я думаю, может быть, вы слишком обдумываете это?

Я читал о @@ Identity, но он захватывает только идентификатор в этом сеансе, так как я отправляю данные первых форм затем переход ко второму не будет ли это другим сеансом.

Разве вам не нужен ключ, который был сгенерирован записями, сделанными в первой форме?

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

0 голосов
/ 14 июня 2011

Ваш сохраненный процесс может вернуть значение идентификатора (используйте выражение output или scope_identity (), чтобы получить его) в качестве выходной переменной, которую вы сохраните как переменную в своем приложении, тогда она будет доступна для использования.Вы должны быть уверены, что обнулите varaible, когда человек переходит к другой записи и после того, как все связанные форматы вставили записи, чтобы вы случайно не использовали его в другое время.

Вы не хотите когда-либо использовать @@ identity для этого, поскольку это ненадежно и может создать серьезные проблемы с целостностью данных, поскольку это даст вам неправильное значение, если кто-то добавит триггер, который вставляет в другую таблицу с идентификатором.

0 голосов
/ 14 июня 2011

Тот факт, что это вызывает у вас проблемы, может свидетельствовать о том, что это не лучший способ сделать это.Возможно, вместо этого используйте функцию в БД для возврата идентификатора, а затем установите его в своем коде .net?

Если у вас есть идентификатор с автоматическим увеличением, то он должен увеличиваться только при создании записи.Ваши три формы создают три записи?Это то, что вы хотите?Если это так, то автоматический ID - определенно неправильный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...