4-2 ADO.NET-查询和检索数据3

本文涉及的产品
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
简介:

6.DataView对象

这里,我们首先引入数据绑定的概念,数据绑定是为了在控件上显示数据库表中存储的数据,而将应用程序的控件与数据表的行进行绑定的过程。
DataView对象表示用于排序、筛选、搜索、编辑和导航的DataTable的可绑定数据的自定义视图。DataView对象的作用主要体现四个方面,请参见图434所示:
4-34 DataView对象的作用体现图
DataView对象常用的方法和属性请参见表419和表420所示:
4-19 DataView对象常用属性表
属性
说明
Item
用于从指定的表中获取一行数据
RowFilter
用于获取或设置表达式,该表达式用于筛选可以在DataView中查看的行
RowStateFilter
用于获取DataView的行状态筛选器
Table
用于表示源DataTable
4-20 DataView对象常用方法表
方法
说明
AddNew()
DataView添加新行
Delete()
用于删除指定索引处的行
请看下面的使用示例代码:
DataView  objStudentView = new DataView(objStudentTable);
        objStudentView.RowFilter = "StudentMarks > 60";
        for (int ctr = 0; ctr < objStudentView.Count; ctr++)
        {
            MessageBox.Show(objStudentView[ctr]["StudentNo"].ToString());
        }
在上面的代码中,创建了DataView对象并对该视图应用某种筛选器。得到的DataView对象可能是objStudentTable表的一个子集,范围是"StudentMarks"字段值大于60的所有学生信息记录。后续代码可以对这个DataView对象里的数据进行访问或者数据绑定。
DataView对象的创建是通过构造函数实例化的。DataView类的构造函数有三个重载,请参见表421所示:
4-21 DataView类的构造函数重载表
名称
说明
初始化DataView类的新实例。
用指定的DataTable初始化DataView类的新实例。
用指定的DataTableRowFilterSortDataViewRowState初始化DataView类的新实例。
请看下面的使用示例代码:
private  void MakeDataView()
{
        DataView view = new DataView();
        view.Table = DataSet1.Tables["Suppliers"];
        view.AllowDelete = true;
        view.AllowEdit = true;
        view.AllowNew = true;
        view.RowFilter = "City = ' Berlin '";
        view.RowStateFilter = DataViewRowState.ModifiedCurrent;
        view.Sort = "CompanyName DESC";
        // 简单绑定到一个TextBox控件上
        Text1.DataBindings.Add("Text", view, "CompanyName");
}
代码中用的是第一种构造函数实例化一个DataView对象,实例化后仍然需要为 DataView 对象指定数据表和 RowFilter Sort RowStateFilter 等属性。但如果用第三种构造函数实例化,在后续代码中就不需要设置上述属性。
DataView 的一个主要功能是允许在 Windows 窗体和 Web 窗体上进行数据绑定。
另外,可自定义 DataView 来表示DataTable中数据的子集。此功能让您拥有绑定到同一 DataTable 、但显示不同数据版本的两个控件。例如,一个控件可能绑定到显示表中所有行的 DataView ,而另一个控件可能配置为只显示已从 DataTable 删除的行。 DataTable 也具有 DefaultView 属性。它返回表的默认DataView。例如,如果希望在表上创建自定义视图,请在 DefaultView 返回的 DataView 上设置 RowFilter
若要创建数据的筛选和排序视图,请设置 RowFilter Sort 属性。然后,使用 Item 属性返回单个DataRowView。你还可使用 AddNew ()和 Delete ()方法从行的集合中进行添加和删除,而在使用这些方法时,可设置 RowStateFilter 属性以便指定只有已被删除的行或新行才可由 DataView 显示。

4-2-3   DataAdapter对象

前面的章节提到客户端应用程序去访问 DataSet 对象中的数据。那么,如何将数据库的数据放在 DataSet 中?这里就需要利用 DataAdapter 对象来实现这个功能。请参见图435所示:
4-35  DataAdapter 对象的作用体现图
从图452中可以看出 DataAdapter 对象起到一个在数据库和 DataSet 数据集之间运输数据的作用。可以用生活案例进行类比,参见图436所示:
4-36 DataAdapter对象的生活案例类比图
类比关系如下:
n 仓库——  数据库
n 临时仓库——  数据集
n 仓库与临时仓库之间的路 ——  数据库连接
n 运货车 ——  数据适配器
从类比关系中可以看出, DataAdapter 数据适配器就像大货车一样,可以将数据从数据库这个大仓库运输到 DataSet 数据集这个临时仓库。也可以把数据从数据库这个 DataSet 数据集这个临时仓库运输到大仓库。不过有一点要说明:生活中的仓库里面的货物被运走了,就没有了。但数据库里的数据被传输到客户端时,数据不会消失。这是信息世界与物质世界的不同。

1.DataAdapter对象概述

DataAdapter 数据适配器用于在数据源和数据集之间交换数据。在许多应用程序中,这意味着从数据库将数据读入数据集,然后从数据集将已更改数据写回数据库。通常 DataAdapter 数据适配器是可以配置的,允许指定哪些数据移入或移出数据集。这经常采用的形式是对 SQL 语句或存储过程的引用,这些语句或存储过程被调用时即可实现对数据库进行读写。
每个数据适配器 DataAdapter 都将在单个数据源表和数据集内的单个 DataTable 对象之间交换数据。如果数据集包含多个数据表,通常的策略是令多个数据适配器向数据集提供数据,并将其数据写回各个数据源表。
DataAdapter 对象表示一组数据命令和一个数据库连接,用于填充DataSet对象和更新数据源。作为 DataSet 对象和数据源之间的桥接器,通过映射 Fill ()方法向 DataSet 填充数据,通过 Update ()方法向数据库更新 DataSet 对象中的变化。这些操作实际上是由 DataAdapter 对象包含的 Select Update Insert Delete 四种 Command 命名对象实现的。也可以直接结合 Command 对象的使用来完成数据的操作。 DataAdapter 对象的工作原理请参见图437所示:
4-37 DataAdapter对象的工作原理图
在客户端应用程序需要处理数据源的数据时,客户端应用程序与数据源之间建立连接。引用数据命令的 DataAdapter 对象向数据源发送数据命令请求,这个请求是执行 DataAdapter 对象的 Fill ()方法来完成“填充”操作时发送并被数据源执行的。数据源的数据就会填充到客户端的 DataSet 对象,在 DataSet 对象内部形成具有跟数据源数据结构一致的数据表 DataTable 对象,而 DataTable 对象内部有包含表示数据结构的 DataColumn 对象集合和表示数据约束的 Constraint 对象集合,还含有表示数据记录的 DataRow 对象的集合。数据以及数据结构填充到 DataSet 对象后 ,DataSet 数据集相当于一个脱机数据库,客户端应用程序操作的数据完全从 DataSet 数据集中获取。这是客户端 DataSet 数据集与数据源之间可以断开连接,也就是说它们之间的关系是非永久连接关系。只有客户端完成数据操作需要将数据回传给数据源时,再次建立连接。由 DataAdapter 对象再次向数据源发送数据命令请求,这个请求是执行 DataAdapter 对象的 Update ()方法来完成“更新”操作时发送并被数据源执行的。执行后,连接再次断开。 .NET 提供程序及其 DataAdapter 类,请参见表 4 22 所示:
4-22 各个命名空间中的DataAdapter对象表
提供程序
DataAdapter
SQL数据提供程序
SqlDataAdapter
OLE DB数据提供程序
OleDbDataAdapter
Oracle数据提供程序
OracleDataAdapter
ODBC数据提供程序
OdbcDataAdapter
在后面的内容中,主要以 SqlDataAdapter 对象为例。

2.DataAdapter对象使用

1 DataAdapter 对象的属性和方法
     DataAdapter 对象常用的方法和属性请参见表423和表424所示:
4-23 DataAdapter对象常用属性表
属性
说明
AcceptChangesDuringFill
决定在把行复制到DataTable中时对行所做的修改是否可以接受
TableMappings
容纳一个集合,该集合提供返回行和数据集之间的主映射
4-24 DataAdapter对象常用方法表
方法
说明
Fill()
用于添加或刷新数据集,以便使数据集与数据源匹配
FillSchema()
用于在数据集中添加DataTable,以便与数据源的结构匹配
Update()
DataSet里面的数值存储到数据库服务器上
请看下面的使用示例代码:
static  private DataSet CreateCommandAndUpdate(string connectionString,string queryString)
{
        DataSet dataSet = new DataSet();
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            connection.Open();
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
            dataAdapter.SelectCommand = new OleDbCommand(queryString, connection);
            OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(dataAdapter);
            dataAdapter.Fill(dataSet);
            // 这里填写修改数据集dataSet的代码
            // 如果没有使用OleDbCommandBuilder,这行会报错
            dataAdapter.Update(dataSet);
        }
        return dataSet;
}
代码示例中,首先利用 dataAdapter.Fill ()将数据从数据源填充到数据集dataSet;最后又利用 dataAdapter . Update ()将数据集 dataSet 中的数据回传至数据源。
2)如何填充数据集
    在前面的章节中,我们已经知道,可以通过 DataAdapter 对象填充数据集对象 Dataset ,其基本工作原理过程前面章节多次提到,这里不再过多叙述,请参见图438所示:
4-38 使用DataAdapter对象填充数据集操作图
使用 DataAdapter 对象填充数据集分两步:
n  第一步:使用Connection连接数据源;
n  第二步:使用Fill()方法填充DataSet中的表。
填充数据集语法参见图439所示:
4-39 使用DataAdapter对象填充数据集语法图
3)如何保存DataSet中的数据
    把数据集中修改过的数据再提交给数据源,这个工作原理过程前面章节多次提到,这里不再过多叙述,请参见图440所示:
4-40 把数据集中修改过的数据提交到数据源操作图
保存DataSet中数据变化的数据语法参见图441所示:
4-41 使用DataAdapter对象保存DataSet中的数据语法图
这里只是应用最简单的Update()一个表,通过SqlCommandBuilder对象来自动生成更新需要的相关命令,不用手动一个一个的写,简化操作。


本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/216019,如需转载请自行联系原作者

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
目录
相关文章
|
8月前
|
开发框架 JavaScript .NET
asp.net中条件查询+分页
asp.net中条件查询+分页
|
3月前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
52 2
|
5月前
|
开发框架 .NET 数据库连接
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
闲话 Asp.Net Core 数据校验(三)EF Core 集成 FluentValidation 校验数据例子
101 1
|
6月前
|
开发框架 JSON 前端开发
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
|
5月前
|
开发框架 前端开发 算法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法
|
5月前
|
SQL Oracle 关系型数据库
.NET 开源快捷的数据库文档查询和生成工具
【8月更文挑战第1天】推荐几款.NET开源数据库文档工具:1. DBDocumentor,支持多类型数据库,快速生成详尽文档;2. SqlDoc,界面简洁,自定义内容与格式;3. DBInfo,强大查询功能,支持多种导出格式。这些工具有效提升文档管理效率与质量。
|
6月前
|
C#
效率提升利器:一个在线的.NET源码查询网站
效率提升利器:一个在线的.NET源码查询网站
|
8月前
|
存储 测试技术 计算机视觉
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
|
4天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统