【问题标题】:How get return value from Stored Procedure如何从存储过程中获取返回值
【发布时间】:2016-05-22 08:20:56
【问题描述】:

我有一个返回整数值的 SP。 SP 没有定义任何返回变量,它直接返回值例如返回-1,返回-2

我尝试了以下代码,但它给出了异常:

代码

AseParameter retval = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int); retval.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery(); //此行抛出异常

例外

NotSupportException

BindParameter - Int

如何读取返回值?

编辑

存储过程

IF OBJECT_ID('dbo.MySP') IS NOT NULL
BEGIN
    DROP PROCEDURE dbo.MySP
    IF OBJECT_ID('dbo.MySP') IS NOT NULL
        PRINT '<<< FAILED DROPPING PROCEDURE dbo.MySP >>>'
    ELSE
        PRINT '<<< DROPPED PROCEDURE dbo.MySP >>>'
END
go
create procedure MySP

    @param1         char(60),
    @param2         char(3),
    @param3           int,
    @param4         char(4)  
as
declare
    @somefield1          char(1),
    @somefield2           datetime,

    If @param1 is null
        return -1

    If @param2 != "L"
        return -2

more code here.....

【问题讨论】:

  • 您是否尝试设置一个值? AseParameter retval = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int).Value = 0;
  • 出现错误“无法将类型'object'隐式转换为'Sybase.Data.AseClient.AseParameter'。存在显式转换(您是否缺少演员表?)
  • 你能显示SP的代码吗?以及更多运行 SP 的代码?
  • 上面添加了SP编码。

标签: c# stored-procedures return-value sybase


【解决方案1】:

使用以下代码解决了该问题。我意识到我正在传递SqlDbType.Int,而这实际上是 Sybase ASE 数据库。

AseParameter retval = new AseParameter("@RETURN_VALUE", AseDbType.Integer);
cmd.Parameters.Add(retval);
retval.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
return (int)cmd.Parameters["@RETURN_VALUE"].Value;

【讨论】:

    【解决方案2】:

    听起来你需要一个 sqldatareader,因为你希望得到一个值。

    This question 已经为您编写好了代码。只需要适应您的情况。还有一些不错的链接可以指向一些相当不错的学习资料。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多