Пример #1
0
        /// <summary>
        ///  查询返回第一行第一列字段的值
        /// </summary>
        /// <typeparam name="TResult">接受查询结果类型</typeparam>
        /// <param name="field">查询的字段</param>
        /// <returns></returns>
        public TResult ToScalar <TResult>(string field)
        {
            Fields.Clear();
            Fields.Add(field);
            string cmdText = ToString();
            object result  = null;

            if (Master)
            {
                result = PgSqlHelper.ExecuteScalar(CommandType.Text, cmdText, command =>
                {
                    this.Command    = command;
                    this.Connection = command?.Connection;
                }, this.ParamList.ToArray());
            }
            else
            {
                result = PgSqlHelper.ExecuteScalarSlave(CommandType.Text, cmdText, command =>
                {
                    this.Command    = command;
                    this.Connection = command?.Connection;
                }, this.ParamList.ToArray());
            }
            return((TResult)result);
        }
Пример #2
0
        /// <summary>
        ///  执行 Insert 语句并返回 Insert 后的结果,该方法仅提供在主数据源上执行,无法对从库源执行此方法
        /// </summary>
        /// <param name="cmdText">Insert SQL 语句</param>
        /// <returns></returns>
        protected T InsertOnReader(string cmdText)
        {
            this.commandtext = cmdText;
            T restult = default(T);

            PgSqlHelper.ExecuteDataReader(dr =>
            {
                restult = DynamicBuilder <T> .CreateBuilder(dr).Build(dr);
            }, CommandType.Text, this.commandtext, this.ParamList.ToArray());

            return(restult);
        }
Пример #3
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);
        }
Пример #4
0
        /// <summary>
        ///  查询返回第一行第一列字段的值
        /// </summary>
        /// <typeparam name="TResult">接受查询结果类型</typeparam>
        /// <param name="field">查询的字段</param>
        /// <returns></returns>
        public TResult ToScalar <TResult>(string field)
        {
            Fields.Clear();
            Fields.Add(field);
            string cmdText = ToString();
            object _val    = null;

            if (PgSqlHelper.InstanceSlave != null && !this.Master)
            {
                _val = PgSqlHelper.ExecuteScalarSlave(CommandType.Text, cmdText, this.ParamList.ToArray());
            }
            else
            {
                _val = PgSqlHelper.ExecuteScalar(CommandType.Text, cmdText, this.ParamList.ToArray());
            }

            return((TResult)_val);
        }
Пример #5
0
        /// <summary>
        ///  执行查询,并返回受影响的行数
        /// </summary>
        /// <param name="cmdText"></param>
        /// <returns></returns>
        public int ExecuteNonQuery(string cmdText, DbParameter[] parameters)
        {
            var affrows = 0;

            try
            {
                affrows = PgSqlHelper.ExecuteNonQuery(CommandType.Text, cmdText, command =>
                {
                    this.Command    = command;
                    this.Connection = command?.Connection;
                }, parameters);
            }
            finally
            {
                this.Clear();
            }

            return(affrows);
        }
Пример #6
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);
        }
Пример #7
0
        /// <summary>
        ///  查询返回第一行第一列字段的值
        /// </summary>
        /// <typeparam name="TResult">接受查询结果类型</typeparam>
        /// <param name="field">查询的字段</param>
        /// <returns></returns>
        public TResult ToScalar <TResult>(string field)
        {
            if (!string.IsNullOrEmpty(GroupByText))
            {
                throw new ArgumentException("聚合查询不允许使用 GROUP BY 条件!");
            }

            Fields.Clear();
            Fields.Add(field);
            string cmdText = ToSQL();
            object result  = null;

            if (Master)
            {
                result = PgSqlHelper.ExecuteScalar(CommandType.Text, cmdText, command =>
                {
                    this.Command    = command;
                    this.Connection = command?.Connection;
                }, this.ParamList.ToArray());
            }
            else
            {
                result = PgSqlHelper.ExecuteScalarSlave(CommandType.Text, cmdText, command =>
                {
                    this.Command    = command;
                    this.Connection = command?.Connection;
                }, this.ParamList.ToArray());
            }
            // Clear();
            if (result == null)
            {
                return(default(TResult));
            }
            else
            {
                return((TResult)result);
            }
        }
Пример #8
0
 /// <summary>
 ///  执行查询,并返回受影响的行数
 /// </summary>
 /// <param name="cmdText"></param>
 /// <returns></returns>
 public int ExecuteNonQuery(string cmdText) => PgSqlHelper.ExecuteNonQuery(CommandType.Text, cmdText, ParamList.ToArray());