【问题标题】:How do I get an SP return value?如何获得 SP 返回值?
【发布时间】:2013-10-31 16:55:32
【问题描述】:

我以前做过,但无法让它工作,我只想在我的 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

【问题讨论】:

  • 您的 SP 看起来设计过度。为什么不简单地将其限制为选择查询。然后它应该返回一个 Datatable 到 .net,你可以在那里提取值。

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


【解决方案1】:

用途:

ParameterDirection.Output

代替:

ParameterDirection.ReturnValue

【讨论】:

  • @connersz,很高兴能为您提供帮助!
【解决方案2】:

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

  1. 为返回值创建参数对象
  2. 显式添加到 dbCommand

这应该可以解决您的问题。

【讨论】:

    【解决方案3】:

    执行前

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

    执行后

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

    【讨论】:

    • 在 GetParameterValue 上出现错误:不包含“getparametervalue”的定义
    • AddOutParameter 也一样
    猜你喜欢
    • 2015-07-16
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2019-01-11
    • 2023-03-11
    • 1970-01-01
    • 2020-12-28
    • 2021-11-13
    相关资源
    最近更新 更多