使用在表适配器中使用 "EXECUTE" 命令的存储过程



我正在编写一个程序,需要调用一个名为dbo.getsystemnumber的MSSQL存储过程;此过程生成下一个pyd_number我需要在paydetail表中插入一个新行。这是过程的样子:

ALTER PROCEDURE [dbo].[getsystemnumber](@p_controlid varchar(8), @p_alternateid varchar(8)) 
AS
    DECLARE @return_number int
    EXECUTE @return_number = dbo.getsystemnumber_gateway @p_controlid, @p_alternateid, 1
    RETURN @return_number

我正在使用 c# 表适配器来调用此过程,但是当我调用它并说将其放在标签或列表框上时,它只返回值 0。当我运行程序时,该函数仍在 SQL Server 中更新到下一个数字。

TMW_Test2DataSetTableAdapters.paydetailTableAdapter returnPydNumber = new TMW_Test2DataSetTableAdapters.paydetailTableAdapter();
lbPydnumber.Items.Add(Convert.ToInt32(returnPydNumber.getsystemnumber("PYDNUM", " ")));

但是,当我在表适配器视图中使用预览数据选项时,我得到了我应该得到的正确数字。在SQL Server中,我们这样称呼它:

declare @pyd_number int
execute @pyd_number = dbo.getsystemnumber N'PYDNUM', NULL
select @pyd_number
TableAdapter使用

SELECT语句的结果作为其数据,而不是查询的RETURN值。在后台,单个值 TableAdapter 将使用 ExecuteScalar() ,它占用结果集第一行中的第一列。

这篇博文对此进行了解释和解决方法。更改存储过程以SELECT值而不是RETURN值,或者更改生成的代码以查看数据库调用的 ReturnValue。

最新更新