У меня утечка памяти из-за неправильного закрытия соединения. Это связано с использованием глобальной функции для доступа к базе данных (с разными строками sql), но я возвращаю sqldatareader. Я не могу закрыть ни это в методе, ни подключение к БД, так как он закрывает доступ к данным! И он не закрывается должным образом снаружи этого метода. :(
Есть ли какой-нибудь способ получить нужную таблицу, к которой sqldatareader предоставляет доступ, в автономном режиме? Чтобы я мог закрыть все соединения, но по-прежнему получать доступ к таблице.
Примечание. Возвращаются разные таблицы, поэтому существуют разные поля. Я не хочу дублировать код каждый раз, когда пытаюсь подключиться.
private SqlDataReader OpenDataStream(String sql)
{
SqlCommand sqlComm = new SqlCommand();
sqlComm.Connection = new SqlConnection();
sqlComm.Connection.ConnectionString = @"Myconnectionstring";
sqlComm.CommandText = sql;
sqlComm.Connection.Open();
SqlDataReader data = null;
data = sqlComm.ExecuteReader();
return data;
// Closing data here, or connection, results in returned object inaccessable.
}
или, может быть, действительный рабочий способ закрыть все это вне метода (после того, как я получил доступ к тому, что мне нужно)?