Вот очень простой вопрос. У меня есть SP, который вставляет строку в таблицу, а в конце есть оператор RETURN @@ IDENTITY. Чего я не могу найти, так это способа получить это значение на C#. Я использую библиотеку Enterprise и использую метод:
db.ExecuteNonQuery(cmd);
Я пробовал cmd.Parameters [0] .Value, чтобы получить значение, но он все время возвращает 0. Есть идеи?





Dim c as new sqlcommand("...")
Dim d As New SqlParameter()
d.Direction = ParameterDirection.ReturnValue
c.parameters.add(d)
c.executeNonQuery
(@@IDENTITY) = d.value
Это примерно так ... либо это, либо просто вернуть значение из хранимой процедуры в качестве выходного параметра.
Вот что делает эта строка - c.parameters.add (d) ... хотя я мог бы вставить это во время редактирования, пока вы писали этот комментарий.
Да, так и было. Не уверен, нужно ли определять имя параметра, поэтому я также опубликовал свой ответ.
Кстати, в большинстве случаев вам следует использовать SCOPE_IDENTITY (), а не @@ IDENTITY. Ссылка.
Я согласен, но в данном контексте это, наверное, не имеет значения.
Для этого недостаточно информации. Вы должны использовать @@ IDENTITY только тогда, когда это действительно необходимо.
Одно упоминание. Вам действительно следует использовать SCOPE_IDENTITY, чтобы вернуть значение идентификатора после INSERT. @@ IDENTITY может вернуть неправильное значение. Особенно, если используются TRIGGERS, записывающие значение в другие таблицы после INSERT.
См. Страницу Книги в Интернете для более подробной информации.
Мне кажется, вы хотите выполнить со скалярным значением
SqlCommand.ExecuteScalar()
как уже упоминали другие, я думаю, что использование SCOPE_IDENTITY () более безопасно, чем переменная @@ IDENTITY
SP должен завершить работу: выберите @@ IDENTITY, а не возвращайтесь, чтобы это сработало.
Кто-то говорит использовать
IDENT_CURRENT ('Имя таблицы')
http://www.velocityreviews.com/forums/t303448-return-identity-after-sql-insert.html
-Зубаир http://zubairdotnet.blogspot.com
Вам нужно добавить параметр в команду, но почти нет.