DataSet 是C#中用来存储数据库数据的。其实,它的作用是在内存中模拟数据库。我们现实生活中的数据库从大到小的基本结构类似于:数据库实例,表,列,行。在C#语言中,我们在内存中也模拟出了一个这样的关系型数据模型。对应关系如下表:
数据库 DataSet
表 DataTable
列 DataColumn
行 DataRow
有了这一样模拟之后,我们在操作数据库和内存的时候,就可以使用同样的思维模型了。
DataSet 和 物理数据库是两个客体,要使这两个客体保持一致,就需要使用 DataAdapter 类来同步两个客体。一般来说操作流程是:使用 DataAdapter 把物理数据库中的数据填充到 DataSet 中的 DataTable 里。当我们对内存中的 DataSet 做了增、删、改操作后,可以使用 DataAdapter 同步回数据库。
MSDN的描述如下:
-
通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个DataTable。
-
通过添加、更新或删除 DataRow 对象更改单个 DataTable 对象中的数据。
-
调用 GetChanges 方法以创建只反映对数据进行的更改的第二个DataSet。
-
调用 DataAdapter 的 Update 方法,并将第二个 DataSet 作为参数传递。
-
调用 Merge 方法将第二个 DataSet 中的更改合并到第一个中。
-
针对 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版本的,应该看这个