获得在C#中asp.net返回值从存储过程(语法问题) [英] Getting a Return Value in C# asp.net from a stored procedure (syntax issue)

查看:170
本文介绍了获得在C#中asp.net返回值从存储过程(语法问题)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有问题想获得语法正确的为我的C#2008 asp.net code。
我需要从我的存储过程中得到一个返回值(选择@@标识)

I am having issues trying to get the syntax correct for my C# 2008 asp.net code. I need to get a return value (Select @@Identity) from my stored procedure

我的C#code是:

        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();

在我的code下一行必须是 ParameterDirection.ReturnValue 的,但我似乎无法得到正确的语法。

The next line in my code needs to be the "ParameterDirection.ReturnValue" but I can't seem to get the syntax correct.

任何想法?

推荐答案

要捕获返回值(使用RETURN({}号)语法SQL返回)使用方法:

To capture a RETURN VALUE (returned by SQL using the RETURN({number}) syntax) use:

cmdHeader.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;

另外,你或许应该使用 SCOPE_IDENTITY()代替@@ IDENTITY

Also, you should probably be using SCOPE_IDENTITY() instead of @@IDENTITY

编辑:

所以,你的存储过程会做这样的事情:


So your sproc would do something like:

DECLARE @NewId INTEGER
INSERT SomeTable(FieldA) VALUES ('Something')
SELECT @NewId = SCOPE_IDENTITY()
RETURN (@NewId)

和你的C#code检索值是:

And your C# code to retrieve that value would be:

int newId = cmdHeader.Parameters[@ReturnValue].value;

编辑2:

好吧,原来的问题混淆了问题的返回值是一个不同的东西你实际上在做它返回一个单列结果集。

Edit 2:
Ok, the original question confused the issue as the "return value" is a different thing to what you're actually doing which is returning a single column resultset.

所以,相反的添加返回值的参数都没有。只需使用<一个href=\"http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx\">ExecuteScalar()使用下面你原来的SqlCommand设置:

So, instead DON'T add a ReturnValue parameter at all. Just use ExecuteScalar() using your original SqlCommand setup as below:

int newId = Convert.ToInt32(cmdHeader.ExecuteScalar());

这篇关于获得在C#中asp.net返回值从存储过程(语法问题)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆