我正在编写一个需要调用名为 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
答案 0 :(得分:0)
TableAdapter
使用SELECT
语句的结果作为其数据,而不是查询的RETURN
值。在引擎盖下,单个值TableAdapter将使用ExecuteScalar()
,它将获取结果集第一行中的第一列。
This blog post解释了这一点和解决方法。将存储过程更改为SELECT
值而不是RETURN
,或更改生成的代码以查看数据库调用的ReturnValue。