Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 触发器返回一个resultset和/或在SET-NOCOUNT关闭的情况下运行,这是什么意思_C#_Visual Studio 2010_Sql Server 2008 - Fatal编程技术网

C# 触发器返回一个resultset和/或在SET-NOCOUNT关闭的情况下运行,这是什么意思

C# 触发器返回一个resultset和/或在SET-NOCOUNT关闭的情况下运行,这是什么意思,c#,visual-studio-2010,sql-server-2008,C#,Visual Studio 2010,Sql Server 2008,我得到一个例外: 触发器返回一个结果集和/或在SET NOCOUNT关闭的情况下运行,而另一个未完成的结果集激活 我想知道这是什么意思,通过一个例子,以及如何在不设置NOCOUNT的情况下避免它,因为我需要知道受影响的行数 这里有更多关于我正在做什么的解释吗 假设我的SQL Server DB中有一个名为AccNodesBal的表,该表上有3个触发器: 更新 插入 删去 我使用ADO.net作为数据层。如您所知,对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。当插入或

我得到一个例外:

触发器返回一个结果集和/或在SET NOCOUNT关闭的情况下运行,而另一个未完成的结果集激活

我想知道这是什么意思,通过一个例子,以及如何在不设置NOCOUNT的情况下避免它,因为我需要知道受影响的行数

这里有更多关于我正在做什么的解释吗

假设我的SQL Server DB中有一个名为AccNodesBal的表,该表上有3个触发器:

更新 插入 删去 我使用ADO.net作为数据层。如您所知,对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括受这两者影响的行数

插入或更新操作 以及受一个或多个触发器影响的行数。 对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也是-1

在我的应用程序代码中,我使用EXCECUTENOQUERY,获取int变量中受影响的行数,并验证它是否为2,以确保触发并记录所有内容

但我得到了这个错误:

A trigger returned a resultset and/or was running with SET NOCOUNT OFF
while another outstanding result set was active.
搜索之后,我发现我必须在触发器中使用SETNOCOUNT ON关键字。不幸的是,这对我的应用程序不起作用,因为触发器现在不会返回受影响行的任何值。有没有人知道另一种方法可以在不使用SETNOCOUNT ON的情况下获取受updates语句和触发器影响的行数

这是我的密码

int recCount = adpt.cmdMovementUpdate(
      amtType == EFG.Acc.AccNodeService.Contracts.Entities.AmountType.Debit ? 0 : Amount, 
      amtType == EFG.Acc.AccNodeService.Contracts.Entities.AmountType.Debit ? Amount : 0, 
      NodeID, PeriodID, Convert.ToInt16(CurrCode), Convert.ToByte(BalCurrType)); 
其中adpt TableAdapter包含我的sql更新命令查询,它在一个WCF服务中实现,由一个Web服务使用,而应用程序使用这个Web服务


搜索后,我发现建议使用SET NOCOUNT ON,但这对我不起作用,因为我的WCF服务中有验证,这取决于ExecuteOnQuery影响的行的结果。

能否尝试在触发器末尾禁用SET NOCOUNT,看看它是否解决了您的问题。另外,请看以下内容

相关/重复?没有人回答我我不知道我的问题是否不够清楚?你的代码中有特定的验证要求触发器触发吗?您不认为这是系统两个部分之间不必要的耦合/复杂性吗?此解决方案不会由理解驱动。这将是一种摇摆不定的事情,直到它们碰巧起作用。我反对。此外,OP正确地要求对问题进行解释。我看到了他的问题,我帖子中的链接应该能更深入地了解为什么会发生这种情况。我尝试在触发器末尾使用set-nocount off,但它无法解决我的问题。如果有问题,那么你需要设置nocount ON!一开始扣动扳机。这是因为nocount off会导致返回值,这会导致递归问题。但正如@usr所写,这个问题需要更多的分析。随机尝试应该是最后的选择。