gpt4 book ai didi

c# - SqlCommand.ExecuteReader/SqlDataReader.Read 吞下异常吗?

转载 作者:行者123 更新时间:2023-11-30 20:41:27 24 4
gpt4 key购买 nike

考虑以下代码:

namespace SqlExceptionTest
{
using System;
using System.Data.SqlClient;

class Program
{
static void Main(string[] args)
{
try
{
var sql =
@"BEGIN TRY
SELECT 1;
THROW 50000, 'An error occured.', 1;
END TRY
BEGIN CATCH
THROW
END CATCH
";

using (var cnn = new SqlConnection("<totally valid connection string>"))
using (var cmd = new SqlCommand(sql, cnn))
{
cnn.Open();

using (var r = cmd.ExecuteReader(System.Data.CommandBehavior.SingleRow))
{
do
{
while (r.Read())
{
// do something
}
} while (r.NextResult());

r.Close();
}

cnn.Close();
}

Console.WriteLine("Code executed without any issues.");
}
catch
{
Console.WriteLine("An exception was raised");
}
finally
{
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
}

(我知道这里的T-Sql代码没有意义,它只是为了演示目的。)

我原以为上面的代码会抛出一个 SqlException 实例,但显然它并没有。相反,while block 通常循环到最后,连接关闭,程序结束。我尝试在框架 v2 上编译到 4.6,每次都得到相同的结果。

我是否有办法,仅在 .NET 中(不改变 T-Sql 代码)使用 SqlDataReader and 来知道发生错误 < em>在 SELECT 语句结束后?还是它永远迷失在 ADO.NET 的机制中?

最佳答案

指定 System.Data.CommandBehavior.SingleRow 允许读取结果集,而不会在应用程序中引发后续异常。 System.Data.CommandBehavior.SingleResult 提供相同的优化

关于c# - SqlCommand.ExecuteReader/SqlDataReader.Read 吞下异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32361766/

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