使用ado.net管理数据库中的关系(relation)非常简单。作为返回单个行集合(rowset)到数据存储(data store)的代替,你可以返回多个行集合并在数据集(dataset)中将它们关联起来。 在ado.net中使用关联的数据表(datatable)有很多好处,包括有将数据存储为层次结构的能力、更容易更新数据、有在列中使用表达式的能力等等。
本文介绍ado.net中基于列(column-based)的表达式和计算。我将演示数据列(datacolumn)上集合函数的使用、汇总、在整个数据集中执行其它类型的计算以及在数据表之间连接数据列。文中还举了几个实例。
在sql查询中合计(summing)和平均值(averaging)对你来说很老套了,这要感谢ansi sql中有类似sum 和avg的集合函数。sql允许列的计算,例如按次序把产品单价乘以数量产生扩充价格。现在ado.net提供了一条途径扩展这些数据源之外的特征并进入n层结构应用程序中间或上层。在ado.net中使用列表达式,你能用数据集中的计算值建立自己的列,在同一行中计算其它列的值,甚至通过数据关系(datarelation)从父数据表或子数据表获取值。使用ado.net中的基于列的表达式和计算形成了新的管理数据的技术。
当然,在ado.net中使用基于表达式的列、集合和计算有利也有弊。表达式可用于数据集的单个数据表或者通过数据关系交叉的两个数据表对象。本文将解释在ado.net和sql中基于表达式的列有什么不同,以及你能从它们中得到什么东西。本文讨论了许多操作,包括用表达式上滚(roll up)和下滚(roll down),它依赖于datarelation对象的关系。我将演示怎样在数据列对象中建立表达式,怎样使用数据集和sql建立集合函数,怎样在数据集中上滚和下滚字段,怎样在数据集中执行列的计算。
sql中的表达式
sql表达式为达到不同的目的有多种格式,包括字符串格式、用户定义函数和数学计算。如果sql语句将姓和名连接到一起、按订单条目次序计算扩充价格、或者在sql server 2000中包含一个用户定义函数来检索一个订单日期,sql语句就包含了表达式。
表达式为程序开发人员从数据库中的其它字段衍生出的行集合中的返回值提供了很大的灵活性。关系型和标准的数据库不会保存订单条目的扩充价格,它只存储单价和数量。扩充价格能从这些值中计算出来,这样避免了数据不同步。例如,如果在一行中存储了数量、单价和扩充价格,可能出现数量为100,单价为7,扩充价格为100的情况。这种情况不该发生,但是如果存储了冗余数据就可能发生了。事务性数据库的通用准则是不存储可以衍生出的信息,例如扩充价格。
这样就有了sql表达式表演的舞台了。扩充价格能通过在sql语句中建立计算列,将单价乘以数量衍生出。扩充价格又能计算帐户的折扣率等信息。下面的sql代码演示了怎样在sql表达式中连接字符串。例子将姓与名连接在一起并返回大写的全名,名字位于前面:
| use pubs go select au_fname as firstname, au_lname as lastname, au_lname + ', ' + au_fname as fullname1, (upper(au_fname) + ' ' + upper(au_lname)) as fullname2 from authors order by au_lname, au_fname |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器