Я пытаюсь наложить свои вызовы клиентских объектов Sql так, чтобы они надежно удалялись.Примерно так:
Открыть соединение с базой данных -> Создать команду -> Читать результаты -> Закрыть команду -> Закрыть соединение с базой данных
Пока это удалось, когда я это сделалвсе эти вещи в одном методе.
Проблема в том, что это подвержено ошибкам.И беспорядок для чтения.
Когда я пытаюсь создать общий метод для обработки этого, который очищает все и возвращает читателя, соединение закрывается до того, как читатель запускается.
//closes connection before it can be read...apparently the reader doesn't actually have any data at that point ... relocating to disposable class that closes on dispose
public SqlDataReader RunQuery(SqlCommand command)
{
SqlDataReader reader = null;
using (var dbConnection = new SqlConnection(_dbConnectionString))
{
try
{
dbConnection.Open();
command.Connection = dbConnection;
reader = command.ExecuteReader(); // connection closed before data can be read by the calling method
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
dbConnection.Close();
}
}
return reader;
}
Я могу обойти это, создав собственный класс, который реализует IDispose (и т. Д.), Но затем, когда я обертываю его тем же оператором using, он занимает столько же строк, сколько соединение с базой данных с помощью оператора.
Как я могупозаботиться о соединении с базой данных в повторяющемся классе, который позаботится обо всех этих артефактах и закроет соединение?