简体   繁体   English

如何从C#代码的存储过程中获取@@ identity或SELECT SCOPE_IDENTITY()的值?

[英]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。在此存储过程中,我想获取@@identitySELECT 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#中获取@@identitySELECT 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM