3

这是一个非常简单的问题。我有一个 SP,它在表中插入一行,最后有语句 RETURN @@IDENTITY。我似乎找不到在 C# 中检索此值的方法。我正在使用企业库并使用以下方法:

db.ExecuteNonQuery(cmd);

我试过cmd.Parameters[0].Value来获取值,但它总是返回 0。有任何想法吗?

4

5 回答 5

5

顺便说一句,在大多数情况下,您应该使用 SCOPE_IDENTITY() 而不是 @@IDENTITY。参考

于 2008-10-29T10:27:00.510 回答
4
Dim c as new sqlcommand("...")

Dim d As New SqlParameter()
d.Direction = ParameterDirection.ReturnValue
c.parameters.add(d)

c.executeNonQuery

(@@IDENTITY) = d.value

它或多或少像这样......要么这样,要么只是从存储过程中返回值作为输出参数。

于 2008-10-29T10:22:23.390 回答
2

有一点要提。您应该真正使用 SCOPE_IDENTITY 在 INSERT 之后返回标识值。@@IDENTITY 有可能返回错误的值。特别是在使用 TRIGGERS 时,在 INSERT 之后将值写入其他表。

有关详细信息,请参阅联机丛书页面。

于 2008-10-29T10:30:42.687 回答
1

有人说用

IDENT_CURRENT('表名')

http://www.velocityreviews.com/forums/t303448-return-identity-after-sql-insert.html

-祖拜尔 http://zubairdotnet.blogspot.com

于 2008-11-12T10:49:59.083 回答
0

听起来你想用标量值执行

SqlCommand.ExecuteScalar()

正如其他人提到的,我认为使用 SCOPE_IDENTITY() 比 @@IDENTITY 变量更安全

于 2008-10-29T10:32:11.467 回答