private IDataReader ExecuteDataReader(OQL oql, AdoHelper db) { string sql = ""; sql = oql.ToString(); //处理实体类分页 2010.6.20 if (oql.PageEnable) { //处理分页统前的记录数量统计问题 感谢网友 @成都-小兵 发现此问题 if (oql.PageWithAllRecordCount == 0) { object oValue = EntityQueryAnonymous.ExecuteOQLCount(oql, db); oql.PageWithAllRecordCount = CommonUtil.ChangeType <int>(oValue); } switch (db.CurrentDBMSType) { case PWMIS.Common.DBMSType.Access: case PWMIS.Common.DBMSType.SqlServer: case PWMIS.Common.DBMSType.SqlServerCe: if (oql.haveJoinOpt) { if (oql.PageNumber <= 1) //仅限定记录条数 { sql = "Select Top " + oql.PageSize + " " + sql.Trim().Substring("SELECT ".Length); } else //必须采用复杂分页方案 { //edit at 2012.10.2 oql.PageWithAllRecordCount sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.SqlServer, sql, "", oql.PageSize, oql.PageNumber, oql.PageWithAllRecordCount); } } else { //单表查询的情况 if (oql.PageOrderDesc) { sql = PWMIS.Common.SQLPage.GetDescPageSQLbyPrimaryKey(oql.PageNumber, oql.PageSize, oql.sql_fields, oql.sql_table, oql.PageField, oql.sql_condition); } else { sql = PWMIS.Common.SQLPage.GetAscPageSQLbyPrimaryKey(oql.PageNumber, oql.PageSize, oql.sql_fields, oql.sql_table, oql.PageField, oql.sql_condition); } } break; case PWMIS.Common.DBMSType.Oracle: sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.Oracle, sql, "", oql.PageSize, oql.PageNumber, 999); break; case PWMIS.Common.DBMSType.MySql: sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.MySql, sql, "", oql.PageSize, oql.PageNumber, 999); break; case PWMIS.Common.DBMSType.PostgreSQL: sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.PostgreSQL, sql, "", oql.PageSize, oql.PageNumber, 999); break; default: throw new Exception("实体类分页错误:不支持此种类型的数据库分页。"); } } IDataReader reader = null; if (oql.Parameters != null && oql.Parameters.Count > 0) { int fieldCount = oql.Parameters.Count; IDataParameter[] paras = EntityQueryAnonymous.GetParameters(oql.Parameters, db); //int index = 0; //foreach (string name in oql.Parameters.Keys) //{ // paras[index] = db.GetParameter(name, oql.Parameters[name]); // index++; //} reader = db.ExecuteDataReader(sql, CommandType.Text, paras); } else { reader = db.ExecuteDataReader(sql); } return(reader); }
private IDataReader ExecuteDataReader(OQL oql, AdoHelper db) { string sql = null; //处理实体类分页 2010.6.20 if (oql.PageEnable) { //处理分页统前的记录数量统计问题 感谢网友 @成都-小兵 发现此问题 if (oql.PageWithAllRecordCount == 0) { //网友 if-else 发现以下问题,备注: //这个函数在只有where而没有排序的时候,生成的统计语句的sql字符串的不对,会生成这种sql //发现没有排序,且pagenumber为1的时候,就直接返回了这种select top这个字符串,自然就查不到count了 //其次就是有分页的时候,把字段名转大写了 //都在SQLpage.cs object oValue = EntityQueryAnonymous.ExecuteOQLCount(oql, db); oql.PageWithAllRecordCount = CommonUtil.ChangeType <int>(oValue); if (oql.PageWithAllRecordCount == 0) { return(null); } } #region 面代码已经重构 /* * * switch (db.CurrentDBMSType) * { * case PWMIS.Common.DBMSType.Access: * case PWMIS.Common.DBMSType.SqlServer: * case PWMIS.Common.DBMSType.SqlServerCe: * if (oql.haveJoinOpt) * { * if (oql.PageNumber <= 1) //仅限定记录条数 * { * sql = "Select Top " + oql.PageSize + " " + sql.Trim().Substring("SELECT ".Length); * * } * else //必须采用复杂分页方案 * { * //edit at 2012.10.2 oql.PageWithAllRecordCount * sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.SqlServer, sql, "", oql.PageSize, oql.PageNumber, oql.PageWithAllRecordCount); * * } * } * else * { * //单表查询的情况 * if (oql.PageOrderDesc) * sql = PWMIS.Common.SQLPage.GetDescPageSQLbyPrimaryKey(oql.PageNumber, oql.PageSize, oql.sql_fields, oql.sql_table, oql.PageField, oql.sql_condition); * else * sql = PWMIS.Common.SQLPage.GetAscPageSQLbyPrimaryKey(oql.PageNumber, oql.PageSize, oql.sql_fields, oql.sql_table, oql.PageField, oql.sql_condition); * } * * break; * case PWMIS.Common.DBMSType.Oracle: * sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.Oracle, sql, "", oql.PageSize, oql.PageNumber, 999); * break; * case PWMIS.Common.DBMSType.MySql: * sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.MySql, sql, "", oql.PageSize, oql.PageNumber, 999); * break; * case PWMIS.Common.DBMSType.PostgreSQL: * sql = PWMIS.Common.SQLPage.MakeSQLStringByPage(PWMIS.Common.DBMSType.PostgreSQL, sql, "", oql.PageSize, oql.PageNumber, 999); * break; * default: * throw new Exception("实体类分页错误:不支持此种类型的数据库分页。"); * * } */ #endregion sql = EntityQueryAnonymous.GetOQLPageSql(oql, db); //分页SQL为空,可能分页页码超出可用范围,感谢 @深圳-有事Q我 发现此bug if (sql == string.Empty) { return(null); } } else { sql = oql.ToString(); } IDataReader reader = null; if (oql.Parameters != null && oql.Parameters.Count > 0) { int fieldCount = oql.Parameters.Count; IDataParameter[] paras = EntityQueryAnonymous.GetParameters(oql.Parameters, db); //int index = 0; //foreach (string name in oql.Parameters.Keys) //{ // paras[index] = db.GetParameter(name, oql.Parameters[name]); // index++; //} reader = db.ExecuteDataReader(sql, CommandType.Text, paras); } else { reader = db.ExecuteDataReader(sql); } return(reader); }