public void Execute() { try { IQueryProvider queryProvider = _transactionController?.Transaction; if (queryProvider == null) { queryProvider = DataProvider; } using (var queryResult = queryProvider.ExecuteReader(ComposeQuery())) { foreach (var query in _queries) { if (query.ProducesResultSet) { query.ResultSetProcessor?.ProcessResult(queryResult); queryResult.NextResult(); } } } } catch { foreach (var query in _queries) { query.ResultSetProcessor?.HandleFailure(); } throw; } }