使用SCOPE_IDENTITY()将标识值返回为0

时间:2016-10-08 20:16:46

标签: c# asp.net sql-server

我在Visual Studio中有一个联系信息表单(使用C#)可用于将联系人转换为客户,这样做我想将刚刚创建的联系人的id发送到另一个表单并且这样做我创建了一个使用SCOPE_IDENTITY()返回id的存储过程。它在SQL Server中工作并正确返回标识但是当我尝试获取它时,将int转换为字符串并将其设置在标签中以便将其读取为0。

我的存储过程如下。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE IdentityTest
      @FirstName varchar(50),
      @LastName varchar(50),
      @id int output
AS
BEGIN
      SET NOCOUNT ON;

      INSERT INTO Employees (FirstName, LastName)
      VALUES (@FirstName, @LastName)

      SET @id = SCOPE_IDENTITY()
      RETURN  @id
END

在我的form.aspx.cs中,我有以下代码来访问数据库。

protected void Button1_Click(object sender, EventArgs e)
{
     SqlCommand cons = new SqlCommand("IdentityTest", cncon);
     cons.CommandType = CommandType.StoredProcedure;

     cons.Parameters.Add("@FirstName", SqlDbType.NVarChar);
     cons.Parameters.Add("@LastName", SqlDbType.NVarChar);
     cons.Parameters.Add("@id", SqlDbType.Int);

     cons.Parameters["@FirstName"].Value = nom.Value;
     cons.Parameters["@LastName"].Value = dirclie.Value;
     cons.Parameters["@id"].Value = IdCliente;

     string IdClientesString = IdCliente.ToString();

     cncon.Open();
     cons.ExecuteNonQuery();

     Label1.Text = IdClientesString;
     cncon.Close();
}

1 个答案:

答案 0 :(得分:0)

您需要在C#代码中将@id参数定义为输出参数:

SqlParameter idParam = cons.Parameters.Add("@id", SqlDbType.Int);
idParam.Direction = ParameterDirection.Output;

在执行查询后,您需要读出值:

cons.ExecuteNonQuery();
int newIdValue = Convert.ToInt32(cons.Parameters["@id"].Value);