IEnumerable <T> Project <T>(IDataReader reader, Func <FieldReader, T> fnProjector) { var items = new List <T>(); var freader = new FieldReader(reader); while (reader.Read()) { T item = default(T); try { item = fnProjector(freader); items.Add(item); } catch (Exception ex) { var exceptionContext = new DbExceptionContextInfo { SqlException = new ProjectionException(ex.Message, ex), //Message = "data bind exception.", Message = ex.Message, }; throw ExceptionHelper.Convert(log, exceptionConverter, exceptionContext); } finally { } } return(items); }
IEnumerable <T> ExecuteBatch <T>(string commandText, NamedParameter[] parameters, IEnumerable <object[]> paramSets, Func <FieldReader, T> fnProjector) { //log.AddMessage("开始时间:"+DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); //log.AddCommand(commandText, parameters, null); var cmdSql = string.Empty; var cmdParameters = string.Empty; Exception err = null; var items = new List <T>(); try { using (DbCommand cmd = this.GetCommand(commandText, parameters, null)) { cmdSql = cmd.CommandText; cmdParameters = paramSets.JsonSerialize(); foreach (var paramValues in paramSets) { cmd.Parameters.Clear(); SetParameterValues(parameters, cmd, paramValues); using (var reader = cmd.ExecuteReader()) { var freader = new FieldReader(reader); if (reader.Read()) { items.Add(fnProjector(freader)); } else { items.Add(default(T)); } } } } } catch (ConnectionException ex) { err = ex; throw; } catch (DBConcurrencyException ex) { err = ex; throw; } catch (Exception ex) { err = ex; var exceptionContext = new DbExceptionContextInfo { Sql = commandText, SqlException = new PersistenceException(ex.Message, ex), }; throw ExceptionHelper.Convert(log, exceptionConverter, exceptionContext); } finally { LogSql(err, cmdSql, cmdParameters); } return(items); }