internal static DataSet getSourceDataSet(string dsName, string where, string orderBy, PaginationInfo pi) { if (string.IsNullOrEmpty(dsName)) { throw new XException(Lang.DataSourceNameIsNull); } string connName = ""; string tableName = dsName; string[] namePath = dsName.Split('.'); if (namePath.Length > 1) { connName = namePath[0]; tableName = namePath[1]; } DatabaseAdmin dba = DatabaseAdmin.getInstance(connName); Database db = dba.Database; List <string> pks = dba.GetPrimaryKeys(tableName); DbCommand cmd = null; if (!dba.ExistsSp(DataSourceConst.PaginationSpName)) { dba.modifyProc(DataSourceConst.PaginationSpName, DataSourceConst.PaginationSpText); } if (pks.Count() == 1) { pi.isStoreProcessPagination = true; cmd = db.GetStoredProcCommand(DataSourceConst.PaginationSpName); cmd.CommandType = CommandType.StoredProcedure; db.AddInParameter(cmd, "@TableName", DbType.String, tableName); db.AddInParameter(cmd, "@PrimaryKey", DbType.String, pks[0]); db.AddInParameter(cmd, "@PageNo", DbType.Int32, pi.page); db.AddInParameter(cmd, "@PageSize", DbType.Int32, pi.pageSize); db.AddInParameter(cmd, "@Where", DbType.String, where); db.AddOutParameter(cmd, "@PageCount", DbType.Int32, sizeof(Int32)); db.AddOutParameter(cmd, "@Total", DbType.Int32, sizeof(Int32)); } else { pi.isStoreProcessPagination = false; StringBuilder sbSql = new StringBuilder(); sbSql.Append("Select * From "); sbSql.Append(tableName); if (!string.IsNullOrEmpty(where)) { sbSql.Append(" Where "); sbSql.Append(where); } if (!string.IsNullOrEmpty(orderBy)) { sbSql.Append(" Order By "); sbSql.Append(orderBy); } cmd = db.GetSqlStringCommand(sbSql.ToString()); } DataSet ds = db.ExecuteDataSet(cmd); TableDef tableDef = dba.getTableDef(tableName); DataTable table = ds.Tables[0]; foreach (FieldDef fieldDef in tableDef.FieldDefs) { if (string.IsNullOrEmpty(fieldDef.Alias)) { continue; } table.Columns[fieldDef.Name].Caption = fieldDef.Alias; } if (pi.isStoreProcessPagination) { pi.pageCount = (int)cmd.Parameters["@PageCount"].Value; pi.total = (int)cmd.Parameters["@Total"].Value; } else { pi.total = table.Rows.Count; pi.pageCount = pi.total / pi.pageSize; if (pi.total % pi.pageSize != 0) { pi.pageCount++; } } return(ds); }