如何获得SP返回值?

时间:2013-10-31 16:55:32

标签: c# asp.net sql stored-procedures ado.net

我之前已经完成了但是无法让它工作,我只想在我的SP中做一个返回任何内容的选择,然后在代码隐藏中执行,然后对返回的代码执行任何操作。

C#代码

protected long getPassword(string EnteredPass) 
{
    var connectionString = ConfigurationManager.ConnectionStrings["GetConnector"].ConnectionString;
    SqlConnection dbConnection = new SqlConnection();
    dbConnection.ConnectionString = connectionString;
    SqlCommand dbCommand = new SqlCommand("PL_User_Check", dbConnection);
    dbCommand.CommandType = CommandType.StoredProcedure;

    SqlParameter abc = dbCommand.Parameters.Add("@User", SqlDbType.VarChar);
    abc.Value = EnteredPass;
    dbCommand.Parameters.Add("@ReturnValue", SqlDbType.Int, 4).Direction = ParameterDirection.ReturnValue;

    dbConnection.Open();

    dbCommand.ExecuteNonQuery();
    dbConnection.Close();
    object x = dbCommand.Parameters[""].Value;
    return Convert.ToInt64(x);
}

存储过程......

ALTER PROCEDURE [dbo].[PL_User_Check]
    @User VARCHAR(50),
    @ReturnValue BIGINT OUTPUT
AS

DECLARE @pass BIGINT

--Data
SET @Pass = (SELECT Pass
    FROM dbo.UserPasswords
    WHERE [User] = @User)

SET @ReturnValue = @Pass

3 个答案:

答案 0 :(得分:2)

使用:

ParameterDirection.Output

而不是:

ParameterDirection.ReturnValue

答案 1 :(得分:0)

显式传递参数,然后可以查询参数对象的值。您正在使用Parameters.Add并隐式创建对象。方法:

  1. 为返回值
  2. 创建参数对象
  3. 显式添加到dbCommand
  4. 这应该可以解决你的问题。

答案 2 :(得分:0)

执行前

dbCommand.AddOutParameter("@ReturnValue", DbType.Int64);

执行后

dbCommand.GetParameterValue<Int64>("@ReturnValue")