【问题标题】:Use Stored procedures that uses the "EXECUTE" command in a TableAdapter在 TableAdapter 中使用使用“EXECUTE”命令的存储过程
【发布时间】:2018-06-24 05:28:26
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

TableAdapters 将SELECT 语句的结果用于他们的数据,而不是查询的RETURN 值。在后台,单个值 TableAdapter 将使用ExecuteScalar(),它获取结果集第一行中的第一列。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多