我正在编写一个程序,需要调用一个名为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。