У нас есть много кода уровня данных, который следует за этой общей схемой:
public DataTable GetSomeData(string filter)
{
string sql = "SELECT * FROM [SomeTable] WHERE SomeColumn= @Filter";
DataTable result = new DataTable();
using (SqlConnection cn = new SqlConnection(GetConnectionString()))
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.Parameters.Add("@Filter", SqlDbType.NVarChar, 255).Value = filter;
result.Load(cmd.ExecuteReader());
}
return result;
}
Думаю, мы можем сделать немного лучше. Моя главная жалоба прямо сейчас заключается в том, что она заставляет все записи загружаться в память даже для больших наборов. Я хотел бы иметь возможность использовать способность DataReader поддерживать только одну запись в ram одновременно, но если я верну DataReader напрямую, соединение будет отключено при выходе из блока использования.
Как я могу улучшить это, чтобы позволить возвращать одну строку за раз?