6.DataView对象

这里,我们首先引入数据绑定的概念,数据绑定是为了在控件上显示数据库表中存储的数据,而将应用程序的控件与数据表的行进行绑定的过程。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

DataView对象表示用于排序、筛选、搜索、编辑和导航的DataTable的可绑定数据的自定义视图。DataView对象的作用主要体现四个方面,请参见图434所示:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

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 = '<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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对象来自动生成更新需要的相关命令,不用手动一个一个的写,简化操作。

转载于:https://blog.51cto.com/qianshao/216019

相关文章:

  • 2021-07-30
  • 2022-01-12
  • 2021-07-24
  • 2021-11-15
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-19
  • 2021-05-17
  • 2021-09-16
  • 2022-01-12
  • 2021-09-23
  • 2021-10-09
相关资源
相似解决方案