gpt4 book ai didi

c# - 如何在出现异常时关闭 DataReader

转载 作者:太空狗 更新时间:2023-10-29 22:20:21 25 4
gpt4 key购买 nike

我的数据层的某些方法中有以下代码:

StringBuilder sb = new StringBuilder();
SqlCommand s = new SqlCommand(sb.ToString(), conn);
try
{
SqlDataReader dr = s.ExecuteReader();
while(dr.Read())
DoSomething(dr);
}
catch (Exception ex)
{
sb.Append(Util.ExceptionRecursive(ex));
}

问题是,dr 永远不会在异常情况下关闭。当其他方法试图访问另一个数据读取器时,它会抛出另一个异常,类似“另一个数据读取器已连接到数据库”

无论如何我都想关闭我的 DataReader。但是这个:

sb = new StringBuilder();
SqlCommand s = new SqlCommand(sb.ToString(), conn);
SqlDataReader dr;
try
{
dr = s.ExecuteReader();
while(dr.Read())
DoSomething(dr);
}
catch (Exception ex)
{
sb.Append(Util.ExceptionRecursive(ex));
}
finally
{
dr.Close();
}

不会工作,因为在异常情况下 dr 可能没有数据,也不会编译。

那我该怎么办呢?

最佳答案

你应该使用 using statement :
它生成一个 finally block 以确保您的资源始终被释放。

StringBuilder sb = new StringBuilder();
using (SqlCommand s = new SqlCommand(sb.ToString(), conn)) {
try
{

using (SqlDataReader dr = s.ExecuteReader()) {
while(dr.Read())
DoSomething(dr);
}

}
catch (Exception ex)
{
sb.Append(Util.ExceptionRecursive(ex));
}
}

关于c# - 如何在出现异常时关闭 DataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6588317/

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