使用使用" EXECUTE"的存储过程。 TableAdapter中的命令

时间:2018-01-15 14:55:59

标签: c# sql-server sql-server-2008 stored-procedures

我正在编写一个需要调用名为 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#tableadapter来调用此过程但是当我调用它并说它放在标签或列表框上时,它只返回值0.该函数仍在SQL Server中更新到下一个我运行程序时的数字。

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

然而,当我在tableadapter视图中使用预览数据选项时,我得到了我应该得到的正确数字。在SQL Server中,我们称之为:

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

1 个答案:

答案 0 :(得分:0)

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

This blog post解释了这一点和解决方法。将存储过程更改为SELECT值而不是RETURN,或更改生成的代码以查看数据库调用的ReturnValue。