我在我的数据层的一些方法中有以下代码:
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));
}
问题在于,出现异常时DataReader 不会关闭。当其他方法试图访问另一个DataReader 时,它会抛出另一个异常,提示“另一个DataReader 已连接到数据库”。
我希望无论什么情况下都能关闭我的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();
}
这样做行不通,因为在异常情况下,可能没有数据可用,而且无法编译。
那我该怎么办呢?
ConnectionStringBuilder
。 - SLaks