Функция oledb для извлечения таблицы в C#


Я работаю на небольшой проект с файлами dBase от 3-й партии. Понимая, что большая часть кода для извлечения таблиц и объектов форма такая же, я сделал эту функцию:

public static IEnumerable<T> OleDbFetch<T>(Func<OleDbDataReader, T> formator, string connectionString, string query)
{
    var conn = new OleDbConnection(connectionString);
    conn.Open();
    var cmd = new OleDbCommand(query, conn);
    var reader = cmd.ExecuteReader();
    while (reader.Read())
        yield return formator(reader);
    conn.Close();
}

Таким образом, я могу использовать его всевозможными классов (готовые, навязывают), что в основном параметров конструктора:

class Person
{
    public int ID { get; set; }
    public string Name { get; set; }

    public Person() { }
}

//...

var persons = OleDbFetch<Person>(
    r => new Person()
    { 
        ID = Convert.ToInt32(r["ID"]), 
        Name = r["Name"].ToString() 
    }, 
    connString, "SELECT ID, Name FROM Person");

Я упускаю что-то очевидное, будучи безрассудным или давая себе слишком много неприятностей?



2191
5
задан 10 ноября 2011 в 01:11 Источник Поделиться
Комментарии
1 ответ

Метод Dispose() типы, реализующие интерфейс IDisposable с помощью блоков:

using (var conn = new OleDbConnection(connectionString))
{
conn.Open();
using (var cmd = new OleDbCommand(query, conn))
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
yield return formator(reader);
}
}

6
ответ дан 10 ноября 2011 в 03:11 Источник Поделиться