Instead of: reader => { while (reader.Read()) { Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetString(2)); } });
I sugest to abstract away the reader usage and put it inside the DataBase.ExecuteReader(...) method and replace the last parameter Action<IDataReader> action with Action<IDataRecord> and iterate inside the method, like so :replace :...using (IDataReader reader = cmd.ExecuteReader()){ action(reader);}...with :using (IDataReader reader = cmd.ExecuteReader()){ while (reader.Read()) { action(reader); }}so: reader => { while (reader.Read()) { Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0), reader.GetString(1), reader.GetString(2)); } });becomes: record => { Console.WriteLine("{0}\t{1}\t{2}", record .GetInt32(0), record .GetString(1), record .GetString(2)); });... and all loops are gone inside user code. (perfect candidate for thread level parallelism now ).Other than that nice vid and good way of using the old ado.net.