private List <Dictionary <string, object> > Query(string name, CommandType commandType, Dictionary <string, object> parameters)
        {
            List <Dictionary <string, object> > results = new List <Dictionary <string, object> >();

            using (IDbConnection connection = _provider.CreateConnection())
            {
                connection.Open();
                using (var reader = _provider.ExecuteQuery(connection, name, commandType, parameters))
                {
                    while (reader.Read())
                    {
                        Dictionary <string, object> result = new Dictionary <string, object>();

                        var columns = Enumerable.Range(0, reader.FieldCount).Select(reader.GetName).ToList();

                        foreach (var column in columns)
                        {
                            object columnValue = reader[column];
                            if (columnValue == DBNull.Value)
                            {
                                result.Add(column, null);
                            }
                            else
                            {
                                result.Add(column, columnValue);
                            }
                        }
                        results.Add(result);
                    }
                }
            }
            return(results);
        }