I'm working on a small project with dBase files from a 3rd party. Realizing that most of the code to fetch tables and form objects is the same, I made this function:
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();
}
That way I can use it with all sorts of classes (pre-made, imposed) that have mostly parameter-less constructors:
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");
Am I missing something obvious, being reckless, or giving myself too much trouble?