У меня есть следующий код в некоторых методах моего уровня данных:
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 подключен к базе данных»
Я хочу закрыть мой 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 может не иметь данных и не будет компилироваться.
Как мне тогда это сделать?