private DataTable ReadDataFromDb() { if (config.GetConnection() == null && (string.IsNullOrEmpty(config.ConnectionString) || string.IsNullOrEmpty(config.ConnectionType))) { throw new InvalidDataException("If no DbConnection is provided, ConnectionString and ConnectionType cannot be empty when using the database option"); } if (string.IsNullOrEmpty(config.SqlSelect)) { throw new InvalidDataException("SQL Select statement must be filled when using the database option"); } DataTable dt = new DataTable("data"); Action doDbSelect = new Action(() => { bool wasOpen = EnsureOpenDbConnection(); var dbCmd = config.GetConnection().CreateCommand(); dbCmd.CommandType = CommandType.Text; dbCmd.CommandText = config.SqlSelect; var behaviour = wasOpen ? CommandBehavior.Default : CommandBehavior.CloseConnection; using (var dbReader = dbCmd.ExecuteReader(behaviour)) { dt.Load(dbReader); dbReader.Close(); } foreach (DataColumn dataColumn in dt.Columns) { dataColumn.ReadOnly = false; } }); doDbSelect(); return(dt); }