Ejemplo n.º 1
0
        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);
        }