在 TableAdapter 中使用使用“EXECUTE”命令的存储过程

Posted

技术标签:

【中文标题】在 TableAdapter 中使用使用“EXECUTE”命令的存储过程【英文标题】:Use Stored procedures that uses the "EXECUTE" command in a TableAdapter 【发布时间】: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

【问题讨论】:

两种调用方式不一样,一种提供NULL,另一种提供空格。调查这两种情况下的行为。 请不要在问题标题中包含标签,@AliAzam C# - using TableAdapter to return a single value from stored procedure returns null的可能重复 @UweKeim 你能告诉我你为什么给我发这种类型的消息吗? @AliAzam 不鼓励在标题中添加标签,因为它看起来很乱并且会使问题不清楚。请参阅meta.stackexchange.com/questions/19190/… 和“我应该在标题中使用标签吗?”在***.com/help/tagging 【参考方案1】:

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

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

【讨论】:

以上是关于在 TableAdapter 中使用使用“EXECUTE”命令的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

在 TableAdapter 中使用使用“EXECUTE”命令的存储过程

如何在 TableAdapter 查询中使用命名参数?

在 vb.net 中使用 tableadapter 更新旧数据并添加新数据

如何使用 TableAdapter 进行更新?

我在 vs 2012 中使用数据集,但在 Designer.cs 中查看 tableadapter 不生成代码

在SQL TableAdapter上使用相同的参数2(或更多)次但仅传递1