Esempio n. 1
0
        public IEnumerable <T> ExecuteQuery <T>(Func <IDataReader, T> mapper = null)
        {
            using (_cmd)
            {
                using (var rd = GetReader())
                {
                    T d;
                    while (true)
                    {
                        try
                        {
                            if (!rd.Read())
                            {
                                break;
                            }
                            if (mapper == null)
                            {
                                mapper = PocoFactory.GetPocoMapper <T>(rd, _cmd.CommandText);
                            }
                            d = mapper(rd);
                        }
                        catch (Exception ex)
                        {
                            Db.OnException(this, ex);
                            Db.CloseConnection();
                            throw;
                        }

                        yield return(d);
                    }
                    Db.CloseConnection();
                }
            }
        }
Esempio n. 2
0
        public T QuerySingle <T>(Func <IDataReader, T> mapper = null)
        {
            T d = default(T);

            using (_cmd)
            {
                using (var rd = GetReader())
                {
                    try
                    {
                        if (rd.Read())
                        {
                            if (mapper == null)
                            {
                                mapper = PocoFactory.GetPocoMapper <T>(rd, _cmd.CommandText);
                            }
                            d = mapper(rd);
                        }
                    }
                    catch (Exception ex)
                    {
                        Db.OnException(this, ex);
                        Db.CloseConnection();
                        throw;
                    }
                    Db.CloseConnection();
                }
            }
            return(d);
        }
Esempio n. 3
0
        public static List <T> Fetch <T>(this DbCommand cmd, Func <IDataReader, T> mapper = null,
                                         bool firstRowOnly = false)
        {
            List <T> rez = new List <T>();

            try
            {
                CommandBehavior behavior = firstRowOnly ? CommandBehavior.SingleRow : CommandBehavior.Default;
                using (var reader = cmd.ExecuteReader(behavior))
                {
                    OnCommand(cmd);
                    while (reader.Read())
                    {
                        if (mapper == null)
                        {
                            mapper = PocoFactory.GetPocoMapper <T>(reader, cmd.CommandText);
                        }
                        rez.Add(mapper(reader));
                    }
                }

                return(rez);
            }
            catch (DbException ex)
            {
                OnException(cmd, ex);
                throw;
            }
        }
Esempio n. 4
0
        public static async Task <List <T> > FetchAsync <T>(this DbCommand cmd, CancellationToken cancellation, Func <IDataReader, T> mapper = null,
                                                            bool firstRowOnly = false)
        {
            List <T> rez = new List <T>();

            try
            {
                CommandBehavior behavior = firstRowOnly ? CommandBehavior.SingleRow : CommandBehavior.Default;
                using (var reader = await cmd.ExecuteReaderAsync(behavior, cancellation))
                {
                    SqlFuDao.OnCommand(cmd);
                    while (await reader.ReadAsync(cancellation))
                    {
                        if (mapper == null)
                        {
                            mapper = PocoFactory.GetPocoMapper <T>(reader, cmd.CommandText);
                        }
                        rez.Add(mapper(reader));
                    }
                }

                return(rez);
            }
            catch (DbException ex)
            {
                SqlFuDao.OnException(cmd, ex);
                throw;
            }
        }
Esempio n. 5
0
        public PagedResult <T> ExecutePagedQuery <T>(Func <IDataReader, T> mapper = null)
        {
            string select;
            string count;

            _db.Provider.MakePaged(_cmd.CommandText, out @select, out count);

            var rez = new PagedResult <T>();

            using (_cmd)
            {
                _cmd.CommandText = count;
                FormatCommand();
                try
                {
                    var cnt = _cmd.ExecuteScalar();
                    cnt.MustNotBeNull();
                    if (cnt.GetType() == typeof(Int32))
                    {
                        rez.Count = (int)cnt;
                    }
                    else
                    {
                        rez.LongCount = (long)cnt;
                    }
                    _db.OnCommand(_cmd);
                    if (rez.Count == 0)
                    {
                        return(rez);
                    }
                    var it = new List <T>();
                    _cmd.CommandText = select;
                    AddPagingParams();
                    FormatCommand();
                    using (var rd = _cmd.ExecuteReader())
                    {
                        while (rd.Read())
                        {
                            if (mapper == null)
                            {
                                mapper = PocoFactory.GetPocoMapper <T>(rd, _cmd.CommandText);
                            }
                            it.Add(mapper(rd));
                        }
                    }
                    rez.Items = it;
                    _db.OnCommand(_cmd);
                }
                catch (Exception ex)
                {
                    Db.OnException(this, ex);
                    Db.CloseConnection();
                    throw;
                }
            }
            return(rez);
        }
Esempio n. 6
0
        internal static IList <TModel> MapReaderToModel <TModel>(IDataReader reader, IDbCommand command, bool useNextResult = false)
        {
            var results = new List <TModel>();

            if (useNextResult)
            {
                if (!reader.NextResult())
                {
                    return(results);
                }
            }

            while (reader.Read())
            {
                var mapper = PocoFactory.GetPocoMapper <TModel>(reader, command.CommandText);
                results.Add(mapper(reader));
            }

            return(results);
        }