我在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();
}
答案 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);