gpt4 book ai didi

c# - 当存储过程返回结果集和异常时,ExecuteReaderAsync 不会抛出异常

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:21 25 4
gpt4 key购买 nike

我有一个存储过程,它有时会在 SELECT 语句后返回异常。例如:

BEGIN TRY
SELECT
EmployeeId,
EmployeeName
FROM dbo.abc

THROW 50000, 'exception occurs here', 16;
END TRY
BEGIN CATCH
THROW 50000, 'exception', 16;
END CATCH

我正在使用 ExecuteReaderAsync 方法读取数据。

如果有异常,我应该在申请中得到异常。例如:

using (var reader = await ExecuteReaderAsync())
{
while (reader.Read())
{
}
}

但我没有得到任何异常(exception)。

这是一个非常奇怪的行为。因为如果在 SELECT 之后我们有一些逻辑并且逻辑失败(例如,任何重要的 UPDATE 语句失败)时发生这种情况,那么这将导致应用程序的行为出现问题。

有人能帮我解释一下为什么会发生这种奇怪的行为吗。

最佳答案

这可能只是因为您在阅读器发现错误之前就将其放置了 - 它在流中比第一个网格晚。尝试做:

using (var reader = await ExecuteReaderAsync())
{
while (reader.Read()) { ... }

// consume any trailing pieces
while (reader.NextResult()) {}
}

第二个循环(通过 NextResult())确保 TDS 解析器消耗了整个结果。您可能还更喜欢使用 await reader.ReadAsync()await reader.NextResultAsync(),因为您显然处于 async 方法中在这里。

关于c# - 当存储过程返回结果集和异常时,ExecuteReaderAsync 不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48807204/

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