<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0062)http://www.cnblogs.com/zxlin25/archive/2009/11/10/1599852.html -->
<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>DataTable、DataView、DataSet 区别 - zxlin25 - 博客园</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content=DataTable,DataView,DataSet,区别 name=keywords><LINK
href="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/common.css"
type=text/css rel=stylesheet><LINK
href="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/common2.css"
type=text/css rel=stylesheet><LINK
href="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/shCore.css"
type=text/css rel=stylesheet><LINK
href="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/shThemeDefault.css"
type=text/css rel=stylesheet><LINK
href="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/customcss.css"
type=text/css rel=stylesheet><LINK title=RSS
href="http://www.cnblogs.com/zxlin25/rss" type=application/rss+xml
rel=alternate><LINK title=RSD href="http://www.cnblogs.com/zxlin25/rsd.xml"
type=application/rsd+xml rel=EditURI>
<SCRIPT src="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/jquery.js"
type=text/javascript></SCRIPT>
<SCRIPT src="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/common.js"
type=text/javascript></SCRIPT>
<SCRIPT
src="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/jquery.json-2.2.min.js"
type=text/javascript></SCRIPT>
<META content="MSHTML 6.00.2900.3268" name=GENERATOR></HEAD>
<BODY>
<FORM id=Form1 name=Form1 action=1599852.html method=post>
<DIV><INPUT id=__EVENTTARGET type=hidden name=__EVENTTARGET> <INPUT
id=__EVENTARGUMENT type=hidden name=__EVENTARGUMENT> <INPUT
id=" __VIEWSTATE" type=hidden name=__VIEWSTATE> </DIV>
<SCRIPT type=text/javascript>
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</SCRIPT>
<!--done-->
<DIV id=home>
<DIV id=header>
<DIV id=blogTitle><A id=lnkBlogLogo href="http://www.cnblogs.com/zxlin25/"><IMG
id=blogLogo alt=返回主页
src="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/logo.gif"></A> <!--done-->
<H1><A class=headermaintitle id=Header1_HeaderTitle
href="http://www.cnblogs.com/zxlin25/">zxlin25</A></H1>
<H2>专注C#,成功来自简单的专注</H2></DIV><!--end: blogTitle 博客的标题和副标题 -->
<DIV id=navigator><!--done-->
<UL id=navList>
<LI><A class=menu id=MyLinks1_HomeLink href="http://www.cnblogs.com/">博客园</A>
</LI>
<LI><A class=menu id=MyLinks1_MyHomeLink
href="http://www.cnblogs.com/zxlin25/">首页</A> </LI>
<LI><A class=menu href="http://news.cnblogs.com/">新闻</A> </LI>
<LI><A class=menu id=MyLinks1_NewPostLink
href="http://www.cnblogs.com/zxlin25/admin/EditPosts.aspx?opt=1"
rel=nofollow>新随笔</A> </LI>
<LI><A class=menu id=MyLinks1_ContactLink accessKey=9
href="http://space.cnblogs.com/msg/send/zxlin25" rel=nofollow>联系</A> </LI>
<LI><A class=menu id=MyLinks1_Admin
href="http://www.cnblogs.com/zxlin25/admin/EditPosts.aspx" rel=nofollow>管理</A>
</LI>
<LI><A class=menu id=MyLinks1_Syndication
href="http://www.cnblogs.com/zxlin25/rss">订阅</A> <A class=aHeaderXML
id=MyLinks1_XMLLink href="http://www.cnblogs.com/zxlin25/rss"><IMG
style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px"
alt=订阅 src="DataTable、DataView、DataSet 区别 - zxlin25 - 博客园.files/rss.gif"></A>
</LI></UL>
<DIV class=blogStats><!--done-->随笔- 134 文章- 0 评论- 20 </DIV><!--end: blogStats --></DIV><!--end: navigator 博客导航栏 --></DIV><!--end: header 头部 -->
<DIV id=main>
<DIV id=mainContent>
<DIV class=forFlow><!--done-->
<DIV id=topics>
<DIV class=post>
<H1 class=postTitle><A class=postTitle2 id=ctl03_TitleUrl
href="http://www.cnblogs.com/zxlin25/archive/2009/11/10/1599852.html">DataTable、DataView、DataSet
区别</A> </H1>
<DIV class=clear></DIV>
<DIV class=postBody>
<P>一、DataTable</P>
<P>DataTable表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。DataTable可以是从通过连接从数据库中读取出来形成的一个表,一旦将内容读到DataTable中,此DataTable就可以跟数据源断开而独立存在;也可以是完全由程序自己通过代码来建立的一个表。</P>
<P>◆ DataColumn</P>
<P>一个表是由行和列组成的一个两维的结构。表的结构是由DataColumn 对象的集合组成,DataColumn
对象集合可由DataTable.Columns
属性中能获取到,通过定义每一列的数据类型来确定表的架构,类似数据库中定义表。定义完表的结构就可以根据结构来生成DataRow,用DataTable.NewRow()方法来生成此DataTable结构的新行。
<BR>一个DataTable是由DataRow的集合组成的, DataRow的集合这个可以由DataTable.Rows 属性来访问。</P>
<P>DataTable还可以通过现有的列用Expression 属性的表达式创建一些列。</P>
<P>1、创建计算出的列
<BR>比如:已经有了一个表结构,表中有一个DataColumn的集合,其中有一个叫UnitPrice的列,你可以新建一个DataColumn,设置好ColumnName,再设置此列的表达式,DataColumn.Expression
= "UnitPrice * 0.086",这个列的值就是名字为UnitPrice的列计算出来的,在创建表达式时,使用 ColumnName
属性来引用列。</P>
<P>2、第二个用途是创建聚合列 <BR>聚合列聚合通常沿着关系执行(有关关系的描述见下面DataRelation部分),如果order表有名为 detail
的子表,两个表之间通过order.orderid和detail.orderid两个列建立一个关系 DataRelation
对象名为“order2detail”,在主表order中就可以建立一个聚合列,将计算每个order在detail表中含有的所有item的价格的和:DataColumn.Expression
=
“sum(child(order2detail).price)",child(order2detail)表示通过关系order2detail联系到的子表,child(order2detail).price就表示子表的price列。</P>
<P>◆ DataRow</P>
<P>DataRow对象没有直接在代码中使用的构造函数,一般是从具有一定结构的DataTable用NewRow()方法来新建一个DataRow对象。一个DataRow根据其是独立的,还是属于某个DataTable,是否修改过,是否被DataTable删除等等不同的情况有不同的状态,由
DataRow.RowState属性公开,如下表:</P>
<P>成员名称</P>
<P>说明</P>
<P>Added <BR>该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。Deleted 该行已通过 DataRow
的 Delete 方法被删除。</P>
<P>Deleted <BR>该行已通过 DataRow 的 Delete 方法被删除。</P>
<P>Detached <BR>该行已被创建,但不属于任何 DataRowCollection。DataRow
在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。</P>
<P>Modified <BR>该行已被修改,AcceptChanges 尚未调用。</P>
<P>Unchanged <BR>该行自上次调用 AcceptChanges 以来尚未更改。</P>
<P>一个DataRow对象刚被创建之后其状态是Detached,是孤立的一个存在,所以建立了DataRow之后在DataRow中的单元填充了数据后还要通过DataTable.Rows.Add(DataRow)方法将此DataRow添加到DataTable,DataRow添加到
DataTable后, 这个DataRow的状态就转