ADO.NET DataSet、DataView 和 DataViewManager 对象指南
2006-11-14 08:36
447 查看
INFO:ADO.NET DataSet、DataView 和 DataViewManager 对象指南
察看本文应用于的产品function loadTOCNode(){}
文章编号 | : | 313485 |
最后修改 | : | 2006年5月25日 |
修订 | : | 5.0 |
本页
概要
概述
DataSet
DataTable
DataColumn
DataRow
DataRelation
ExtendedProperties
DataView
DataViewManager
疑难解答
var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'";
var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif";
var depthLimit = 10;
var depth3Limit = 10;
var depth4Limit = 5;
var depth5Limit = 3;
var tocEntryMinimum = 1;
概要
loadTOCNode(1, 'summary');本文提供学习和掌握 ADO.NET DataSet、DataView 和 DataViewManager 对象的指南。
指南文章提供指向有用信息的链接,这些信息包括联机文档、Microsoft 知识库文章和 Microsoft 白皮书,目的在于帮助您了解 Microsoft 产品或技术。Microsoft 知识库“如何”文章和演练提供完成具体任务的分步说明。快速入门示例文件是用来阐释技术的现成的程序。
有关其他 ADO.NET 技术指南文章,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
313590 (http://support.microsoft.com/kb/313590/) INFO:ADO.NET 指南
回到顶端 |
概述
loadTOCNode(2, 'summary');DataSet 是一个处于非连接状态的数据存储;无论数据源是什么,它都可提供一致的功能。DataSet 还是数据的关系组织(如数据库)和数据的分层组织(如可扩展标记语言)之间的桥梁。DataSet 类似于处于非连接状态的 Recordset 对象的数组,但 DataSet 可提供更强大的功能。DataSet 可以维护本地约束、级联更新和删除,并按照关系提供分层导航。与 Microsoft ActiveX 数据对象 (ADO) 相比,DataSet 还具有功能更强大的表达式计算器。这使您在搜索和筛选记录时更具灵活性。还可以使用 DataSet 对行版本和错误状态进行低级别的控制。
DataView 可提供对单个 DataTable 进行排序和筛选的机制。DataViewManager 可在执行分层导航时,提供对多个 DataTable 对象进行排序和筛选的机制。
有关 ADO.NET DataSet 对象的更多信息,请参考以下 Microsoft 网站:
ADO.NET Dataset
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontheadonetdataset.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontheadonetdataset.asp)
Database-like Data Containers(类似数据库的数据容器)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data04262001.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data04262001.asp)
回到顶端 |
DataSet
loadTOCNode(2, 'summary');DataSet 对象包括下列元素:• | DataTable 对象 |
• | DataColumn 对象 |
• | DataRow 对象 |
• | DataRelation 对象 |
• | ExtendedProperties 集合 |
DataSet 通过以下方法提供读写可扩展标记语言 (XML) 数据和架构的功能:
• | InferXmlSchema |
• | ReadXml |
• | ReadXmlSchema |
• | WriteXml |
• | WriteXmlSchema |
• | GetXml |
• | GetXmlSchema |
下面的列表介绍了 DataSet 的某些方法和属性:
• | [b]HasChanges 属性[/b]。如果任何 DataTable 对象包含已修改的记录,则该属性返回 True。 | ||||
• | [b]GetChanges 方法[/b]。此方法返回只包含已更改元素的 DataSet 的副本。 可以结合 DataRowState 标志来控制是添加、删除还是修改记录(或这些操作的组合)。默认情况下,返回所有更改。如果不存在任何更改,则返回 null(在 Microsoft Visual C# .NET、Microsoft Visual C++ .NET、Microsoft JScript .NET 中)或 Nothing(在 Microsoft Visual Basic .NET 中)。 | ||||
• | [b]Merge 方法[/b]。本方法可合并两个 DataSet 对象。MissingSchemaAction 参数控制是否对目标 DataSet 架构进行扩展以匹配源 DataSet 架构、是否忽略扩展的架构或者扩展的架构是否导致异常。
| ||||
• | [b]CaseSensitive 属性[/b]。此属性确定数据是否区分大小写;不过,也可以一个表一个表地进行此项设置。架构既可以区分大小写,也可以不区分大小写。当 ADO.NET 访问某个项目时,ADO.NET 采用区分大小写的查找方式。如果此查找方式失败,ADO.NET 便换用不区分大小写的查找。如果有多个名称相同的项目(这是不区分大小写的),则您会在该区分大小写的查找方式失败时收到异常。 | ||||
• | [b]AcceptChanges 和 RejectChanges 方法[/b]。这两个方法从本地提交或回滚 DataSet 中的数据更改。这两个方法不影响架构更改。 | ||||
• | [b]Locale 属性[/b]。可以使用此属性设置 CultureInfo 对象以控制排序和搜索。 | ||||
• | [b]DefaultViewManager 属性[/b]。此属性返回 DataSet 所维护的 DataViewManager 对象。您可以使用此对象来控制排序和筛选,也可以创建您自己的一个或多个独立的 DataViewManager 对象。 |
单击此处可查看与 ADO.NET DataSet 对象及其他相关对象有关的“如何”文章的列表 (http://support.microsoft.com/common/canned.aspx?r=d&h=ado.net+dataset+how+to+articles&ll=kbadonet&sz=kbhowto+and+(dataset+or+datatable+or+datacolumn+or+datarow+or+datarelation+or+constraint+or+dataview+or+dataviewmanager+or+datarowview))
Visual Studio .NET 帮助文档
Accessing Data with ADO.NET(使用 ADO.NET 访问数据)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaccessingdatawithadonet.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaccessingdatawithadonet.asp)
Creating and Using DataSets(创建和使用 DataSet)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcreatingusingdatasets.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcreatingusingdatasets.asp)
Creating a DataSet(创建 DataSet)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcreatingdatasetprogrammatically.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcreatingdatasetprogrammatically.asp)
Adding a DataTable to a DataSet(将 DataTable 添加到 DataSet 中)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaddingdatatabletodataset.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaddingdatatabletodataset.asp)
Adding a Relationship between Tables(在表之间添加关系)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaddingrelationshipbetweentwotables.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconaddingrelationshipbetweentwotables.asp)
Navigating a Relationship between Tables(在表之间的关系中导航)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconnavigatingrelationshipbetweentwotables.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconnavigatingrelationshipbetweentwotables.asp)
Using a DataSet with Existing Data(将 DataSet 用于现有数据)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconusingdatasetwithexistingdata.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconusingdatasetwithexistingdata.asp)
Merging DataSet Contents(合并数据集内容)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconmergingdatasetcontents.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconmergingdatasetcontents.asp)
Copying DataSet Contents(复制数据集内容)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcopyingdatasetcontents.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcopyingdatasetcontents.asp)
Working with DataSet Events(使用 DataSet 事件)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconworkingwithdatasetevents.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconworkingwithdatasetevents.asp)
MSDN 文章
以下文章摘自 Diving Into Data Access(深入探讨数据访问)专栏。
Data Relations and Relatives(数据关系和相关性)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data07122001.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data07122001.asp)
Clonation and the Case of Table Dolly, Part 1(Table Dolly 的副本和事例,第一部分)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data05102001.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data05102001.asp)
Clonation and the Case of Table Dolly, Part 2(克隆和 Table Dolly 案例,第二部分)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data05242001.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data05242001.asp)
快速入门示例
How Do I...Save DataSet mappings to an XSD schema file?(如何将 DataSet 映射保存到 XSD 架构文件?)
http://samples.gotdotnet.com/quickstart/howto/doc/Xml/SaveDataSetMapXSDSchema.aspx (http://samples.gotdotnet.com/quickstart/howto/doc/Xml/SaveDataSetMapXSDSchema.aspx)
SaveDataSetMapXSDSchema 示例演示了如何在代码中创建 DataTable 对象及如何添加 DataRow 对象,以及如何将 XML 架构定义 (XSD) 写入流中。
How Do I...Save a DataSet as XML?(如何将 DataSet 另存为 XML?)
http://samples.gotdotnet.com/quickstart/howto/doc/Xml/SaveDataSetXML.aspx (http://samples.gotdotnet.com/quickstart/howto/doc/Xml/SaveDataSetXML.aspx)
SaveDataSetXML 示例演示了如何在代码中创建 DataTable、如何在代码中添加 DataRow 对象、如何分析 XML 节点以及如何写入控制台。
注意:如果在计算机上安装了快速入门示例,则这些示例位于 /QuickStart/Howto/Samples/Xml 文件夹中。
Microsoft 知识库“如何”文章
305346 (http://support.microsoft.com/kb/305346/) 如何使用 Visual Basic .NET 在 DataTable 之间复制 DataRow
308909 (http://support.microsoft.com/kb/308909/) 如何使用 Visual C# .NET 在数据表之间复制数据行
308058 (http://support.microsoft.com/kb/308058/) 如何使用 Visual Basic .NET 在 DataSet 中获取扩展消息
要查看包含用来在单个函数调用中处理常见 DataSet 操作(例如 CREATE TABLE 和 SELECT DISTINCT 等效命令、联接以及分组)的 Helper 函数的文章列表,请单击以下链接:
单击此处可查看 DataSetHelper 的文章的完整列表 (http://support.microsoft.com/common/canned.aspx?r=d&h=ado.net+datasethelper+articles&ll=kbadonet&sz=kbhowto+and+datasethelper+and+kbadonet)
DataTable
loadTOCNode(3, 'summary');DataTable 是元数据和数据的集合,其中,元数据是通过 DataColumn 对象和 Constraint 对象的集合描述的,而数据则包含在 DataRow 对象的集合中。DataTable 可以独立存在,也可以是 DataSet 的一部分。与 ADO Recordset 对象(可操作 Provider)不同,DataTable 是一个被动对象。DataAdapter 对象、XmlDataDocument 对象和用户代码可操作 DataTable。DataTable 不知道自己的数据来自何处。这些数据可以来自多个源。
下面的列表介绍了 DataTable 的某些方法和属性:
• | [b]AcceptChanges 方法、RejectChanges 方法、Clone 方法、Copy 方法、GetChanges 方法以及 HasChanges 属性[/b]。这些方法和 HasChanges 属性在操作上与它们在 DataSet 中的等效方法和属性类似,只是它们会影响单个 DataTable,而它们的等效方法和属性则不会。 |
• | [b]PrimaryKey 属性[/b]。可以使用 PrimaryKey 属性指示哪一列或哪些列构成主键。 |
• | [b]ImportRow 方法[/b]。此方法可添加来自具有相同架构的其他 DataTable 中的 DataRow 的副本。可以将此方法与 Clone 方法结合使用来复制记录,这比单独使用 Copy 方法更便于进行选择。 |
• | [b]Select 方法[/b]。此方法返回根据您提供的参数进行排序和筛选的 DataRow 对象的数组。您还可以按行状态进行筛选。 |
• | [b]Constraints 属性[/b]。此属性是 DataTable 中唯一约束和外键约束的集合。 |
DataColumn
loadTOCNode(3, 'summary');可以使用 DataColumn 定义 DataTable 或 DataRow 中列的属性(主要是定义 ColumnName 和 DataType 属性)。DataColumn 包含 AutoNumber 和 Null 支持。下面的列表介绍了 DataColumn 的某些属性:
• | [b]ColumnMapping 属性[/b]。在 XmlDataDocument 操作 DataColumn 时或在 DataSet 序列化 DataColumn 时,此属性可控制 DataColumn 对象是映射到 XML 元素,还是映射到属性。 |
• | [b]Unique 属性[/b]。此属性允许您对非主键列设置唯一约束。 |
DataRow
loadTOCNode(3, 'summary');尽管 DataRow 可以独立存在,但 DataTable 或 DataRowBuilder 必须创建 DataRow。例如,可以使用 DataTable 的 NewRow 方法创建 DataRow,也可以将 DataTable 用于 DataRowBuilder 的架构来创建 DataRow。DataRow 可以具有下列多种状态:
• | 未修改 |
• | 已修改 |
• | 已添加 |
• | 已删除 |
DataRow 可以具有下列多种版本:
• | 原始 |
• | 当前 |
• | 建议(在编辑时) |
• | BeginEdit |
• | EndEdit |
• | CancelEdit |
• | AcceptChanges |
• | RejectChanges |
下面的列表介绍了 DataRow 的某些方法和属性:
• | [b]HasVersion 方法[/b]。可以使用 HasVersion 方法来测试是否有特定的 DataRowVersion 值。
| ||||||
• | [b]GetParentRow、GetParentRows、GetChildRow 和 GetChildRows 方法[/b]。这些方法基于指定的 DataRelation 返回包含父行或子行的 DataRow 对象或 DataRow 对象的数组。这些方法允许在各表间进行分层访问。 注意:DataRelation 对象允许在各层之间存在多种关系(即,DataRelation 不必使用唯一列)。因此,DataRow 包括 GetParentRows 方法。 | ||||||
• | [b]HasErrors 和 RowError 属性[/b]。这些属性指示 DataRow 是否有错。尽管 DataAdapter 通常在更新失败后设置这些属性,但您也可以手动设置这些属性。 |
DataRelation
loadTOCNode(3, 'summary');DataRelation 对象定义两个 DataTable 对象之间的父/子关系。下面的列表介绍了 DataRelation 的某些属性:
• | [b]ParentKeyConstraint 和 ChildKeyConstraint 属性[/b]。这两个属性确定是否强制执行引用完整性。 |
• | [b]Nested 属性[/b]。此属性确定在 DataSet 序列化为 XML 时,子表元素是否嵌套在父表内。 |
ExtendedProperties
loadTOCNode(3, 'summary');DataSet、DataTable、DataRelation 和 Constraint 对象均支持 ExtendedProperties 集合,可以在该集合中为对象存储用户定义的属性。回到顶端 |
DataView
loadTOCNode(2, 'summary');可以使用 DataView 对要查看的记录进行排序和筛选。每个 DataTable 都具有可以访问和设置其属性的 DefaultView 对象。此外,还可以在 DataTable 中创建许多独立的 DataView 对象。DataView 可创建基于已排序的列的索引,该索引通过 Find 方法提供快速搜索功能。只能使用此 Find 方法搜索当前已排序的列。如果按多个列对 DataView 进行排序,则必须在 Find 方法中提供一组值。可以通过简单的赋值,编辑 DataTable 行中各字段的“当前”值。更改将立即进行。或者,也可以使用 BeginEdit 方法更改“建议”行版本,使用 EndEdit 或 CancelEdit 方法提交或回滚所做的更改。
不能直接在 DataView 中编辑数据行。而必须使用 BeginEdit、EndEdit 和 CancelEdit 方法。调用 EndEdit 方法后,更改将写入 DataTable 中且可以立即使用。并通知同一 DataTable 中的其他 DataView 对象所做的更改。
默认情况下,DataView 绑定到“当前”行。可以将 DataViewRowState 传递到构造函数以绑定到其他行版本(例如,访问“已删除”记录)。
注意:只能将 DataView 绑定到单个 DataTable。创建 DataView 后,不能让该 DataView 筛选其他 DataTable。
只要更改了筛选或排序的基础数据,就会引发 ListChanged 事件。
Visual Studio .NET 帮助文档
Creating and Using DataViews(创建和使用 DataView)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcreatingusingdataviews.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconcreatingusingdataviews.asp)
MSDN 文章
以下文章摘自 Diving into Data Access(深入探讨数据访问)专栏。
Views and Filters(视图和筛选器)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data06142001.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data06142001.asp)
本文介绍 DataView 和 DataViewManager 对象以及结构信息。本文还将这些对象与 Recordset 副本做了比较。
快速入门示例
http://samples.gotdotnet.com/quickstart/howto/doc/adoplus/FilterData.aspx (http://samples.gotdotnet.com/quickstart/howto/doc/adoplus/FilterData.aspx)
FilterData 示例使用 SqlDataAdapter 对象填充 DataSet,然后使用 DataView 筛选 DataTable。
注意:如果在计算机上安装了这些快速入门示例,则这些示例位于 /QuickStart/Howto/Samples/Adoplus 文件夹中。
Microsoft 知识库文章
325682 (http://support.microsoft.com/kb/325682/) 如何在 Visual Basic .NET 中实现自定义的 DataView 类
回到顶端 |
DataViewManager
loadTOCNode(2, 'summary');如果通过 DataView 或 DataTable 导航到子记录,则这些子记录未经过筛选(除非与父记录有关)。可以使用 DataViewManager 指定在执行分层导航时应用的 RowFilter 和 Sort 属性。例如,如果将一个 Windows 窗体 DataGrid 控件绑定到包含客户和订单列表的 DataSet,则在导航到特定客户的订单时,将显示所有订单。但是,如果将 DataGrid 绑定到 DataViewManager,并将 DataViewSetting 对象添加到 DataViewManager.DataViewSettings 集合,则可以筛选订单列表以便只显示超过某一金额的订单。此外,您还可以筛选订单列表并根据订单金额以降序对它们进行排序。
Visual Studio .NET 帮助文档
Setting Default Table Views Using a DataViewManager(使用 DataViewManager 设置默认表视图)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsettingdefaulttableviewsusingdataviewmanager.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsettingdefaulttableviewsusingdataviewmanager.asp)
MSDN 文章
本文摘自 Diving into Data Access(深入探讨数据访问)专栏。
Views and Filters(视图和筛选器)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data06142001.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data06142001.asp)
本文介绍 DataView 和 DataViewManager 对象以及结构信息。本文还将这些对象与 Recordset 副本做了比较。
回到顶端 |
疑难解答
loadTOCNode(2, 'summary');如果遇到问题并且需要问题的答案,可以访问 MSDN 新闻组或 Microsoft 知识库。在 MSDN 新闻组中,可以分享同行的经验。MSDN 新闻组
http://msdn.microsoft.com/newsgroups/ (http://msdn.microsoft.com/newsgroups/)
搜索知识库
http://support.microsoft.com/search/?adv=1 (http://support.microsoft.com/search/?adv=1)
相关文章推荐
- 转 ADO.NET DataSet、DataView 和 DataViewManager 对象指南
- ADO.NET常用对象详解之:DataSet对象
- ADO.NET之dataadapter对象填充dataset对象
- 深入分析ADO.NET中的DataSet对象
- Winform开发之ADO.NET对象Connection、Command、DataReader、DataAdapter、DataSet和DataTable简介
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- ADO.NET对象之DataSetAndDataTable操作
- 深入分析ADO.NET中的DataSet对象
- ADO.NET 更新数据库的2种方式::(1)使用DataSet对象更新数据集;(2)使用SqlCommand对象更新单条记录
- 深入分析ADO.NET中的DataSet对象
- 数据库-ADO.NET数据访问对象-第二讲-DataSet和DataSetCommand对象之一
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- 将Json数据转换为ADO.NET DataSet对象
- ADO.NET常用对象详解之:DataSet对象
- 深入分析ADO.NET中的DataSet对象的结构以及操作方法
- 深入分析ADO.NET中的DataSet对象
- ADO.NET中Dataset对象