C# DataSet

  DataSet 是C#中用来存储数据库数据的。其实,它的作用是在内存中模拟数据库。我们现实生活中的数据库从大到小的基本结构类似于:数据库实例,表,列,行。在C#语言中,我们在内存中也模拟出了一个这样的关系型数据模型。对应关系如下表:

数据库  DataSet

表    DataTable

列    DataColumn

行    DataRow

  有了这一样模拟之后,我们在操作数据库和内存的时候,就可以使用同样的思维模型了。


  DataSet 和 物理数据库是两个客体,要使这两个客体保持一致,就需要使用 DataAdapter 类来同步两个客体。一般来说操作流程是:使用 DataAdapter 把物理数据库中的数据填充到 DataSet 中的 DataTable 里。当我们对内存中的 DataSet 做了增、删、改操作后,可以使用 DataAdapter 同步回数据库。

  MSDN的描述如下:

    1. 通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个DataTable

    2. 通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。

    3. 调用 GetChanges 方法以创建只反映对数据进行的更改的第二个DataSet

    4. 调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。

    5. 调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。

    6. 针对 DataSet 调用 AcceptChanges。或者,调用 RejectChanges 以取消更改。

 

一、 创建dataset

  1. 创建

  可以选择指定一个名称参数。如果没有为 DataSet 指定名称,则默认设置为“NewDataSet”。

DataSet customerOrders = new DataSet("CustomerOrders");

  2. 复制

  DataSet 的原样副本,其中包含架构、数据、行状态信息和行版本。  

DataSet copyDataSet = customerDataSet.Copy();

  创建包含现有 DataSet 的架构但仅包含已修改行的 DataSet。可以返回已修改的所有行或者指定特定的 DataRowState。

// Copy all changes.
DataSet changeDataSet = customerDataSet.GetChanges();
 // Copy only new rows.
DataSet addedDataSet = customerDataSet.GetChanges(DataRowState.Added);

  仅复制 DataSet 的架构(即关系结构),而不复制任何行。可以使用 ImportRow 将行导入现有 DataTable。

DataSet germanyCustomers = customerDataSet.Clone();

 

二、 向 DataSet 添加 DataTable

  我们可以创建 DataTable 对象,并将其添加到现有 DataSet 中。还可以使用 PrimaryKey 和 Unique 属性为 DataTable 设置约束信息。

  以下示例构造一个 DataSet,将一个新的 DataTable 对象添加到该 DataSet 中,然后将三个 DataColumn 对象添加到该表中。最后,该代码将一个列设置为主键列。

DataSet customerOrders = new DataSet("CustomerOrders");
DataTable ordersTable = customerOrders.Tables.Add("Orders");
DataColumn pkOrderID
= ordersTable.Columns.Add("OrderID", typeof(Int32)); ordersTable.Columns.Add("OrderQuantity", typeof(Int32)); ordersTable.Columns.Add("CompanyName", typeof(string)); ordersTable.PrimaryKey = new DataColumn[] { pkOrderID };

 

 

 

 参考文献:http://msdn.microsoft.com/zh-cn/library/ss7fbaez(v=vs.90) //这个是3.5版本的,应该看这个

 

posted @ 2012-07-27 17:32  疯狂鼠标垫  阅读(13444)  评论(0编辑  收藏  举报