namespace DataTableReaderDemon
public static class Program
public static void Main()
const string CONSOLE_MASK = "ID: {0}, First: {1}, Last: {2}, Birth Date: {3}";
var dt = DataTableBuilder.GetSampleDataTable();
var reader = new DataTableReader(dt);
reader.GetDbNullInt(0, 0),
reader.GetDbNullString(1, "First"),
reader.GetDbNullString(2, "Last" ),
reader.GetDbNullDateTime(3, new DateTime(1900,12,31))
internal static class DataTableBuilder
internal static DataTable GetSampleDataTable()
var result = new DataTable();
result.Columns.Add("Id", typeof (int));
result.Columns.Add("FirstName", typeof(string));
result.Columns.Add("LastName", typeof(string));
result.Columns.Add("Birthdate", typeof (DateTime));
result.Rows.Add(new object[] { DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value });
result.Rows.Add(new object[] {1, "Bill", "Bunion", new DateTime(2000, 1, 23)});
result.Rows.Add(new object[] {2, "Sally", "Smith", new DateTime(1999, 12, 31)});
internal static class DataTableReaderExtensions
internal static string GetDbNullString
this DataTableReader reader,
var result = reader.IsDBNull(ordinalPosition)
: reader.GetString(ordinalPosition);
internal static int GetDbNullInt
this DataTableReader reader,
var result = reader.IsDBNull(ordinalPosition)
: reader.GetInt32(ordinalPosition);
internal static DateTime GetDbNullDateTime
this DataTableReader reader,
var result = reader.IsDBNull(ordinalPosition)
: reader.GetDateTime(ordinalPosition);