zoukankan      html  css  js  c++  java
  • 水晶报表使用push模式(2)

    1.考虑如何存储设计所需的数据模型?
    实际上我们可以认为,每张基表就是粒度最细的数据模型,只是某些字段是代码性质,不适合于最终用户去使用而已。
    所以我们建立基表的时候是否可以考虑把列的友好名称保存,以便我们建立数据模型的时候引用。
    实际上这些数据可以认为是整个系统的元数据之一,包括界面、数据模型等需要的地方都可以引用。
    保存在哪里?
    第一,使用系统的机制,保存在系统表中;
    第二,也可以自己设计表来保存。当然若是前者的话,在企业管理器中也可以查看到,方便数据库管理员使用。

    有了基表数据后,我们就可以通过基表来建立我们的数据模型了。
    通常我们可以构建一个视图,其列信息可从基表中获得。
    我们可以通过sysdepends获取其依赖的表、视图以及其相应的列,从而可通过sysproperties获取其列的信息。
    示例如下:
    select distinct d.id,c.name,p.value from sysdepends as d inner join sysobjects as o on d.depid=o.id
    inner join syscolumns as c on d.depid=c.id and d.depnumber=c.colid
    left join sysproperties   p on p.id=c.id and   p.smallid=c.colid
    where d.id =object_id(@ModelName)
    2.如何获取数据
    借用ado.net中的概念,考虑在源数据和数据模型间有一个适配器,这个适配器用于从源数组织数据,从而形成符合数据模型结构的数据。
    实际中适配器通常就是一段查询语句,该语句基于数据模型生成。当然,也可能是一个存储过程,用于生成来源复杂、计算复杂的数据。
    3.如何过滤数据
    仔细考虑,我们可以发现过滤的条件不超乎数据模型所约定的范围。所以,我们可以根据数据模型来设置过滤的条件。因为数据模型中包括
    了字段名、数据类型等,所以我们很方便根据这些内容形成查询语句。示例如下:
    StringBuilder sb=new StringBuilder("select * from "+DataModel);
    sb.Append(" ");
    sb.Append("Where");
    sb.Append(" ");
    sb.Append(columnName);
    sb.Append(" ");
    sb.Append(operator);
    sb.Append(" ");
    sb.Append("@" + columnName);
    sb.Append(" ");
    同样,根据这些设置的过滤条件及值,我们也很方便形成SqlParameter,从而通过SqlDataAdapter获取数据。
    对于存储过程,我们的过滤条件不会超过存储过程中所包含的参数。当然存储过程本身的参数受数据模型本身的限制。
    我们可以通过SqlCommandBuilder.DeriveParameters(cmd)获取其包含的参数,从而形成过滤条件的设置信息。         

  • 相关阅读:
    leetcode--Populating Next Right Pointers in Each Node II
    leetcode—Populating Next Right Pointers in Each Node
    Pascal's Triangle II
    leetcode—pascal triangle
    leetcode—triangle
    October 23rd, 2017 Week 43rd Monday
    October 22nd, 2017 Week 43rd Sunday
    October 21st 2017 Week 42nd Saturday
    October 20th 2017 Week 42nd Friday
    October 19th 2017 Week 42nd Thursday
  • 原文地址:https://www.cnblogs.com/chump/p/2367480.html
Copyright © 2011-2022 走看看