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