protected virtual Object Execute(IDbCommand cmd, Object[] args) { if (_dataReaderHandler == null) { throw new EmptyRuntimeException("dataReaderHandler"); } IDataReader dataReader = null; try { if (_dataReaderHandler is ObjectDataReaderHandler) // CSharp specific { return(ExecuteScalar(cmd)); } else { try { dataReader = CreateDataReader(cmd); return(_dataReaderHandler.Handle(dataReader)); } catch (Exception e) { HandleDbException(e, cmd); return(null); // Unreachable! } } } finally { Close(dataReader); } }
public async Task <IResultSets> ExecuteReaderAsync(IDbCommand command, IDataReaderHandler handler, CancellationToken cancellationToken = default(CancellationToken)) { using (var reader = await((MySqlCommand)command).ExecuteReaderAsync(cancellationToken).ConfigureAwait(false)) { return(handler.Handle(new OptimizedDataReader(reader))); } }
public async Task Handle(DbDataReader reader, CancellationToken token) { var hasNext = await reader.NextResultAsync(token).ConfigureAwait(false); if (!hasNext) { throw new InvalidOperationException("There is no next result to read over."); } await _inner.Handle(reader, token); }