コード例 #1
0
        /// <summary>
        ///  执行查询并返回结果集
        /// </summary>
        /// <typeparam name="TResult">接受查询结果对象类型</typeparam>
        /// <returns></returns>
        public List <TResult> ExecuteReader <TResult>(string cmdText)
        {
            List <TResult>           list    = new List <TResult>();
            DynamicBuilder <TResult> builder = null;

            void action(DbDataReader dr)
            {
                TResult obj     = default(TResult);
                Type    objType = typeof(TResult);
                bool    isTuple = objType.Namespace == "System" && objType.Name.StartsWith("ValueTuple`");

                if (isTuple)
                {
                    int columnIndex = -1;
                    obj = (TResult)GetValueTuple(objType, dr, ref columnIndex);
                }
                else if (IsValueType(objType))
                {
                    obj = (TResult)GetValueType(objType, dr);
                }
                else if (objType.Namespace.StartsWith("Newtonsoft"))
                {
                    obj = (TResult)GetJToken(dr);
                }
                else
                {
                    if (builder == null)
                    {
                        builder = DynamicBuilder <TResult> .CreateBuilder(dr);
                    }
                    obj = builder.Build(dr);
                }
                list.Add(obj);
            }

            if (PgSqlHelper.InstanceSlave != null && !Master)
            {
                PgSqlHelper.ExecuteDataReaderSlave(action, CommandType.Text, cmdText, this.ParamList.ToArray());
            }
            else
            {
                PgSqlHelper.ExecuteDataReader(action, CommandType.Text, cmdText, this.ParamList.ToArray());
            }
            return(list);
        }
コード例 #2
0
        /// <summary>
        ///  执行查询并返回结果集
        /// </summary>
        /// <typeparam name="TResult">接受查询结果对象类型</typeparam>
        /// <returns></returns>
        public List <TResult> ExecuteReader <TResult>(string cmdText)
        {
            List <TResult>           list    = new List <TResult>();
            DynamicBuilder <TResult> builder = null;
            Type objType = typeof(TResult);

            try
            {
                if (Master)
                {
                    PgSqlHelper.ExecuteDataReader(dr =>
                    {
                        var obj = ReadObj <TResult>(ref builder, dr, objType);
                        list.Add(obj);
                    }
                                                  , CommandType.Text, cmdText, command =>
                    {
                        this.Command    = command;
                        this.Connection = command?.Connection;
                    }, this.ParamList.ToArray());
                }
                else
                {
                    PgSqlHelper.ExecuteDataReaderSlave(dr =>
                    {
                        var obj = ReadObj <TResult>(ref builder, dr, objType);
                        list.Add(obj);
                    }
                                                       , CommandType.Text, cmdText, command =>
                    {
                        this.Command    = command;
                        this.Connection = command?.Connection;
                    }, this.ParamList.ToArray());
                }
            }
            finally
            {
                this.Clear();
            }
            return(list);
        }