我有一个存储过程,有时会在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())
{
}
}
但我没有任何例外。
这是一种非常奇怪的行为。 因为如果在SELECT之后我们有一些逻辑并且逻辑失败(例如任何重要的UPDATE语句失败)时会发生这种情况,那么这将导致应用程序行为出现问题。
有人可以帮助我,为什么我会发生这种奇怪的行为。
答案 0 :(得分:3)
这可能仅仅是因为您在发现错误之前处理了读取器 - 这在流中比第一个网格稍晚。尝试做:
using (var reader = await ExecuteReaderAsync())
{
while (reader.Read()) { ... }
// consume any trailing pieces
while (reader.NextResult()) {}
}
第二个循环(超过NextResult()
)确保TDS解析器已使用整个结果。您可能还希望使用await reader.ReadAsync()
和await reader.NextResultAsync()
,因为您明确使用async
方法。