• 水晶报表使用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)获取其包含的参数,从而形成过滤条件的设置信息。         

  • 相关阅读:
    linux基础知识之vi编辑器的使用
    Linux的通信命令
    Linux学习之文件的压缩与解压
    Liux文件操作
    Linux简单学习
    Drupal V7.3.1 框架处理不当导致SQL注入
    Typecho V1.1反序列化导致代码执行分析
    浅析PHP反序列化漏洞之PHP常见魔术方法(一)
    python正则表达式记录
    SQLmap源码分析之框架初始化(一)
  • 原文地址:https://www.cnblogs.com/chump/p/2367480.html
Copyright © 2020-2023  润新知