gpt4 book ai didi

c# - ADO.NET ExecuteScalar() 不抛出异常

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:59 24 4
gpt4 key购买 nike

我正在测试 ExecuteScalar(),特别是它如何处理 SP 中抛出的错误。当执行具有这种形状的 SP 时:

throw 50001, '', 1;
select 1;

异常是由 ADO.NET 引发的(预期行为),但是,如果我执行具有这种形状的 SP:

select 1;
throw 50001, '', 1;

没有引发异常(意外行为),我得到了选定的值(在本例中为 1)。我想这与 Sql Server 将其数据流回 ADO.NET 的方式有关,但我不知道如何解决这个问题。

最佳答案

未检测到您抛出的异常的原因是因为 ExecuteScalar() 方法获取从命令或存储过程返回的第一个结果集并丢弃任何其他结果。

这意味着当返回结果后引发异常时,您将永远不会在 ExecuteScalar() 方法中看到它,因为该方法已停止从数据库服务器查找结果集,并且基本上忽略了发回的任何其他信息。如果您返回 2 个值(即 Select 1;Select 2;Throw;),您会看到这一点,因为第二个值永远不会被看到。

如果您担心这种行为,或者您可能希望从存储过程中接收多个结果集,那么您应该使用 ExecuteReader() 来获取数据读取器,然后使用读取器对象的 NextResult() 方法进行迭代通过所有返回的结果集,然后您将看到异常被发送回您的程序。

关于c# - ADO.NET ExecuteScalar() 不抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42808466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com