从存储过程中获取C#asp.net中的返回值(语法问题)

use*_*521 6 c# sql-server asp.net-3.5

我在尝试为我的C#2008 asp.net代码获取正确的语法时遇到问题.我需要从我的存储过程中获取返回值(Select @@ Identity)

我的C#代码是:

        SqlConnection conn = new SqlConnection(strConn);
        string sql = "usp_ClientProfile_Header";
        SqlCommand cmdHeader = new SqlCommand(sql, conn);

        cmdHeader.CommandType = CommandType.StoredProcedure;

        cmdHeader.Parameters.Add(new SqlParameter("@FirstName", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@FName"].Value = txtFName.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@LastName", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@LName"].Value = txtLName.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@EmailAddress", SqlDbType.VarChar, 100));
        cmdHeader.Parameters["@Email"].Value = txtEMail.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@Address1", SqlDbType.VarChar, 255));
        cmdHeader.Parameters["@Address1"].Value = txtAddress1.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@City", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@City"].Value = txtCity.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@State", SqlDbType.VarChar, 50));
        cmdHeader.Parameters["@State"].Value = txtState.Text.Trim();

        cmdHeader.Parameters.Add(new SqlParameter("@ZipCode", SqlDbType.VarChar, 12));
        cmdHeader.Parameters["@Postal_Code"].Value = txtZip.Text.Trim();
Run Code Online (Sandbox Code Playgroud)

我的代码中的下一行需要是" ParameterDirection.ReturnValue ",但我似乎无法使语法正确.

有任何想法吗?

Ada*_*Dev 16

要捕获RETURN VALUE(使用RETURN({number})语法由SQL返回),请使用:

cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;
Run Code Online (Sandbox Code Playgroud)

此外,您应该使用SCOPE_IDENTITY()而不是@@ IDENTITY

编辑:
所以你的sproc会做类似的事情:

DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)
Run Code Online (Sandbox Code Playgroud)

并且您检索该值的C#代码将是:

int newId = cmdHeader.Parameters[@ReturnValue].value;
Run Code Online (Sandbox Code Playgroud)

编辑2:
好的,原始问题混淆了问题,因为"返回值"与您实际执行的操作不同,后者返回单个列结果集.

因此,请勿添加ReturnValue参数.只需使用原始SqlCommand设置执行ExecuteScalar(),如下所示:

int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());
Run Code Online (Sandbox Code Playgroud)