[英]How to get to get the value of @@identity or SELECT SCOPE_IDENTITY() from stored procedure in C# code?
I use SQL Server 2012. In this stored procedure, I want to get the value of @@identity
or SELECT SCOPE_IDENTITY()
. 我使用SQL Server2012。在此存储过程中,我想获取
@@identity
或SELECT SCOPE_IDENTITY()
。 intMyIdentity
is the identity column. intMyIdentity
是身份列。
CREATE PROCEDURE [spMyInsert]
(@vchVar AS VARCHAR(20),
@fltVar AS FLOAT)
AS
SELECT TOP 1 intMyIdentity
FROM MyTbl
WHERE vchVar = @vchVar
IF @@rowcount = 0
BEGIN
INSERT INTO MyTbl (vchVar, fltVar)
VALUES (@vchVar, @fltVar)
SELECT @@identity AS intMyIdentity
-- SELECT SCOPE_IDENTITY()
END
How can I get the value of @@identity
or SELECT SCOPE_IDENTITY()
in C# ? 如何在C#中获取
@@identity
或SELECT SCOPE_IDENTITY()
的值?
When using ExecuteScalar
, it returns 0, instead of the correct value. 使用
ExecuteScalar
,它返回0,而不是正确的值。
SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString);
oConn.Open();
mCommand.CommandText = "spMyInsert";
mCommand.Parameters.Add(new SqlParameter("@vchVar", txtMyVar.Text));
mCommand.Parameters.Add(new SqlParameter("@fltVar", dblMyVar));
mCommand.Connection = oConn;
mCommand.CommandType = CommandType.StoredProcedure;
intMyIdentity = Convert.ToInt32(mCommand.ExecuteScalar()); --> this always return 0
oConn.Close();
Edited: this query works 编辑:此查询有效
IF NOT EXISTS (SELECT 1 FROM myTbl WHERE vchVar = @vchVar)
BEGIN
INSERT INTO myTbl (vchVar, fltVar)
VALUES (@vchVar, @fltVar)
SELECT SCOPE_IDENTITY()
END
When you use ExecuteScalar, your stored procedure must RETURN the @@identity. 当您使用ExecuteScalar时,您的存储过程必须返回@@ identity。 Something like RETURN @@IDENTITY;
像RETURN @@ IDENTITY之类的东西;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.