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);
        }