예제 #1
0
        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.",
                    };
                    throw ExceptionHelper.Convert(log, exceptionConverter, exceptionContext);
                }
            }
            return(items);
        }
예제 #2
0
        IEnumerable <T> ExecuteBatch <T>(string commandText, NamedParameter[] parameters, IEnumerable <object[]> paramSets, Func <FieldReader, T> fnProjector)
        {
            log.LogCommand(commandText, parameters, null);

            var items = new List <T>();

            try
            {
                using (DbCommand cmd = this.GetCommand(commandText, parameters, null))
                {
                    //if (dialect.SupportPreparingCommands)
                    //    cmd.Prepare();

                    foreach (var paramValues in paramSets)
                    {
                        log.LogParameters(parameters, paramValues);
                        log.LogMessage("");

                        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)
            {
                throw;
            }
            catch (DBConcurrencyException)
            {
                throw;
            }
            catch (Exception ex)
            {
                var exceptionContext = new DbExceptionContextInfo
                {
                    Sql          = commandText,
                    SqlException = new PersistenceException(ex.Message, ex),
                };

                throw ExceptionHelper.Convert(log, exceptionConverter, exceptionContext);
            }

            return(items);
        }