在 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】:TableAdapter
s 将SELECT
语句的结果用于他们的数据,而不是查询的RETURN
值。在后台,单个值 TableAdapter 将使用ExecuteScalar()
,它获取结果集第一行中的第一列。
This blog post 解释了这一点和解决方法。要么将存储过程更改为 SELECT
值而不是 RETURN
ing 它,要么更改生成的代码以查看数据库调用的 ReturnValue。
【讨论】:
以上是关于在 TableAdapter 中使用使用“EXECUTE”命令的存储过程的主要内容,如果未能解决你的问题,请参考以下文章
在 TableAdapter 中使用使用“EXECUTE”命令的存储过程
在 vb.net 中使用 tableadapter 更新旧数据并添加新数据