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

6.DataView对象

这里,我们首先引入数据绑定的概念,数据绑定是为了在控件上显示数据库表中存储的数据,而将应用程序的控件与数据表的行进行绑定的过程。
DataView对象表示用于排序、筛选、搜索、编辑和导航的DataTable的可绑定数据的自定义视图。DataView对象的作用主要体现四个方面,请参见图434所示:
4-2 ADO.NET-查询和检索数据3
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对象指定数据表和RowFilterSortRowStateFilter等属性。但如果用第三种构造函数实例化,在后续代码中就不需要设置上述属性。
DataView的一个主要功能是允许在Windows窗体和Web窗体上进行数据绑定。
另外,可自定义DataView来表示DataTable中数据的子集。此功能让您拥有绑定到同一DataTable、但显示不同数据版本的两个控件。例如,一个控件可能绑定到显示表中所有行的DataView,而另一个控件可能配置为只显示已从DataTable删除的行。DataTable也具有DefaultView属性。它返回表的默认DataView。例如,如果希望在表上创建自定义视图,请在DefaultView返回的DataView上设置RowFilter
若要创建数据的筛选和排序视图,请设置RowFilterSort属性。然后,使用Item属性返回单个DataRowView。你还可使用AddNew()和Delete()方法从行的集合中进行添加和删除,而在使用这些方法时,可设置RowStateFilter属性以便指定只有已被删除的行或新行才可由DataView显示。

4-2-3  DataAdapter对象

前面的章节提到客户端应用程序去访问DataSet对象中的数据。那么,如何将数据库的数据放在DataSet中?这里就需要利用DataAdapter对象来实现这个功能。请参见图435所示:
4-2 ADO.NET-查询和检索数据3
4-35 DataAdapter对象的作用体现图
从图452中可以看出DataAdapter对象起到一个在数据库和DataSet数据集之间运输数据的作用。可以用生活案例进行类比,参见图436所示:
4-2 ADO.NET-查询和检索数据3
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对象包含的SelectUpdateInsertDelete四种Command命名对象实现的。也可以直接结合Command对象的使用来完成数据的操作。DataAdapter对象的工作原理请参见图437所示:
4-2 ADO.NET-查询和检索数据3
4-37 DataAdapter对象的工作原理图
在客户端应用程序需要处理数据源的数据时,客户端应用程序与数据源之间建立连接。引用数据命令的DataAdapter对象向数据源发送数据命令请求,这个请求是执行DataAdapter对象的Fill()方法来完成“填充”操作时发送并被数据源执行的。数据源的数据就会填充到客户端的DataSet对象,在DataSet对象内部形成具有跟数据源数据结构一致的数据表DataTable对象,而DataTable对象内部有包含表示数据结构的DataColumn对象集合和表示数据约束的Constraint对象集合,还含有表示数据记录的DataRow对象的集合。数据以及数据结构填充到DataSet对象后,DataSet数据集相当于一个脱机数据库,客户端应用程序操作的数据完全从DataSet数据集中获取。这是客户端DataSet数据集与数据源之间可以断开连接,也就是说它们之间的关系是非永久连接关系。只有客户端完成数据操作需要将数据回传给数据源时,再次建立连接。由DataAdapter对象再次向数据源发送数据命令请求,这个请求是执行DataAdapter对象的Update()方法来完成“更新”操作时发送并被数据源执行的。执行后,连接再次断开。.NET提供程序及其DataAdapter类,请参见表422所示:
4-22 各个命名空间中的DataAdapter对象表
提供程序
DataAdapter
SQL数据提供程序
SqlDataAdapter
OLE DB数据提供程序
OleDbDataAdapter
Oracle数据提供程序
OracleDataAdapter
ODBC数据提供程序
OdbcDataAdapter
在后面的内容中,主要以SqlDataAdapter对象为例。

2.DataAdapter对象使用

1DataAdapter对象的属性和方法
    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-2 ADO.NET-查询和检索数据3
4-38 使用DataAdapter对象填充数据集操作图
使用DataAdapter对象填充数据集分两步:
n 第一步:使用Connection连接数据源;
n 第二步:使用Fill()方法填充DataSet中的表。
填充数据集语法参见图439所示:
4-2 ADO.NET-查询和检索数据3
4-39 使用DataAdapter对象填充数据集语法图
3)如何保存DataSet中的数据
    把数据集中修改过的数据再提交给数据源,这个工作原理过程前面章节多次提到,这里不再过多叙述,请参见图440所示:
4-2 ADO.NET-查询和检索数据3
4-40 把数据集中修改过的数据提交到数据源操作图
保存DataSet中数据变化的数据语法参见图441所示:
4-2 ADO.NET-查询和检索数据3
4-41 使用DataAdapter对象保存DataSet中的数据语法图
这里只是应用最简单的Update()一个表,通过SqlCommandBuilder对象来自动生成更新需要的相关命令,不用手动一个一个的写,简化操作。


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

上一篇:PHP错误:Forbidden You don't have permission to access / on this server.


下一篇:iOS开发几年了,你清楚OC中的这些东西么!!!?