/// <summary> /// 执行查询SQL,返回列表object /// </summary> /// <param name="sql"></param> /// <param name="pageSize"></param> /// <param name="curPage"></param> /// <param name="returnClass">不能为null</param> /// <returns></returns> public PageList <T> ExecutePageListObjectByType <T>(string sql, string orderKey, int pageSize, int curPage, Type returnClass) { PageList <T> objs = new PageList <T>(); T obj; IDataReader idr = null; // 计算获取的记录编号范围(当前页) objs.SetPage(pageSize, curPage); try { // 获取总记录数 if (pageSize != -1) { objs.TotalCount = ParamUtil.getint(_db.ExecuteScalarBySql(_isql.CountSql(sql))); } string pageSql = _isql.PageSql(sql, orderKey, objs.StartRecord, objs.EndRecord); // 执行查询 idr = _db.ExecuteReaderBySql(pageSql); // 获取指定范围的数据 while (idr.Read()) { obj = (T)ReflectUtil.CreateInstance(returnClass); // 第一列为COL_ROWNUM(记录号),不设置属性值 for (int i = 1; i < idr.FieldCount; i++) { ReflectUtil.SetPropertyValue(obj, idr.GetName(i), idr.GetValue(i)); } objs.Add(obj); } // 如果未分页,则设置总数为当前页记录数 if (pageSize == -1) { objs.TotalCount = objs.CurPageCount; } } finally { if (idr != null) { idr.Close(); } } return(objs); }
/// <summary> /// 设置SQL参数 /// </summary> /// <param name="fullParamName">参数全名称,有基础类型、类属性和末尾sql等三种参数 /// 基础类型格式: #[1-99]:ParamName#, 第一个字符表示参数顺序号,值范围数字1-99,第二个字符为冒号分隔符,后面是实际参数名 /// 类属性格式:#ParamName#,ParamName就是实际参数名,必须与参数类的某个公开属性严格匹配 /// 末尾sql格式:fullParamName为空字符串,此时只有ParamSql属性有意义 /// </param> /// <param name="sql"></param> /// <param name="isConditionParam">是否条件参数</param> /// <returns>SQL参数</returns> private SqlParam SetSqlParam(string fullParamName, string sql, bool isConditionParam) { string paramName = ""; int paramSeq = 0; int paramNameIndex; // 0.fullParamName=="": 表示最后一个参数,只有SQL有效,参数名和类型无效,参数编号为-1 // 1.(fullParamName.IndexOf(":")<0): 表示基础类型,参数名中包含参数顺序号,格式: #[1-99]:ParamName# // 2.(fullParamName.IndexOf(":")>=0): 表示对象类,参数名中为类属性,格式: 类属性名 if (fullParamName == "") { paramSeq = -1; } else { paramNameIndex = fullParamName.IndexOf(":"); if (paramNameIndex < 0) { paramName = fullParamName.Substring(1, fullParamName.Length - 2); } else { paramName = fullParamName.Substring(paramNameIndex + 1, fullParamName.Length - paramNameIndex - 2); paramSeq = ParamUtil.getint(fullParamName.Substring(1, paramNameIndex - 1)); } } // 条件参数:需要将参数字符转换为{0},简化ToString()的处理 if (isConditionParam == true) { sql = " " + sql.Replace(fullParamName, "{0}"); } // 返回参数 return(new SqlParam(paramName, paramSeq, sql, isConditionParam)); }