public async Task <IDataReader> ExecuteStoredProcedureAsync(string name, params ParameterDefinition[] parametersDefinitions)
        {
            LogExecuteProc(name);
            ISqlConnection connection = connectionProvider.Provide <ISqlConnection>();
            await connection.OpenAsync();

            IDataReader dataReader1;

            using (ISqlCommand command = connection.CreateCommand(null))
            {
                command.CommandTimeout = 300000;
                command.CommandType    = CommandType.StoredProcedure;
                command.CommandText    = name;
                ParameterDefinition[] parameterDefinitionArray = parametersDefinitions;
                for (int index = 0; index < parameterDefinitionArray.Length; ++index)
                {
                    ParameterDefinition parameterDefinition = parameterDefinitionArray[index];
                    command.Parameters.AddWithValue(parameterDefinition.Name, parameterDefinition.Value, parameterDefinition.IsNullable, parameterDefinition.DbType, parameterDefinition.Size, parameterDefinition.Direction);
                    parameterDefinition = null;
                }
                parameterDefinitionArray = null;
                if (parametersDefinitions.Where(m => m.Direction > ParameterDirection.Input).Count() > 0)
                {
                    command.ExecuteNonQuery();
                    GetParameterCollection(command.Parameters.GetParameter(), parametersDefinitions);
                }
                IDataReader dataReader = await command.ExecuteReaderAsync(CommandBehavior.CloseConnection);

                dataReader1 = dataReader;
            }
            return(dataReader1);
        }
        public async Task <IDataReader> ExecuteReaderAsync(string sql)
        {
            LogQuery(sql);
            ISqlConnection connection = connectionProvider.Provide <ISqlConnection>();
            await connection.OpenAsync();

            IDataReader dataReader1;

            using (ISqlCommand command = connection.CreateCommand(null))
            {
                command.CommandTimeout = 300000;
                command.CommandType    = CommandType.Text;
                command.CommandText    = sql;
                IDataReader dataReader = await command.ExecuteReaderAsync(CommandBehavior.CloseConnection);

                dataReader1 = dataReader;
            }
            return(dataReader1);
        }