惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Palo Alto Networks Blog
P
Proofpoint News Feed
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
罗磊的独立博客
J
Java Code Geeks
月光博客
月光博客
F
Full Disclosure
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
U
Unit 42
WordPress大学
WordPress大学
A
About on SuperTechFans
C
Cyber Attacks, Cyber Crime and Cyber Security
SecWiki News
SecWiki News
Security Latest
Security Latest
C
Check Point Blog
C
CERT Recently Published Vulnerability Notes
小众软件
小众软件
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
B
Blog RSS Feed
V
Visual Studio Blog
博客园_首页
NISL@THU
NISL@THU
I
Intezer
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
The Register - Security
The Register - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Latest news
Latest news
Project Zero
Project Zero
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
博客园 - 【当耐特】
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threat Research - Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
V
Vulnerabilities – Threatpost
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网

博客园 - 木人(我现在不是老大)

ERP系统的专业化发展趋势 讨厌的real和float数据 Svcutil使用点滴 windows server2003企业版64位安装sql server2008企业版64位 读书笔记 UltraGrid(16) 水晶报表使用push模式(1) SQL SERVER2000存储过程调试 读书笔记 UltraGrid(15) 读书笔记 UltraGrid(14) 读书笔记 UltraGrid(12) 读书笔记 UltraGrid(11) 读书笔记 UltraGrid(10) 读书笔记 UltraGrid(9) 读书笔记 UltraGrid(8) 读书笔记 UltraGrid(7) 读书笔记 UltraGrid(6) 读书笔记 UltraGrid(5) 读书笔记 UltraGrid(4) 读书笔记 UltraGrid(3)
水晶报表使用push模式(2)
木人(我现在不是老大) · 2012-02-25 · via 博客园 - 木人(我现在不是老大)

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