/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); } }
/// <summary> /// 执行查询,并返回受影响的行数 /// </summary> /// <param name="cmdText"></param> /// <returns></returns> public int ExecuteNonQuery(string cmdText) => PgSqlHelper.ExecuteNonQuery(CommandType.Text, cmdText, ParamList.ToArray());