C# DataAdapter

DataAdapter 用于从数据源检索数据并填充 DataSet 中的表。DataAdapter 还可将对 DataSet 所做的更改解析回数据源。

1. 从 DataAdapter 填充数据集

  DataAdapter是 DataSet 数据源的桥梁。形象的来说,DataAdapter 是一个运输车,它把信息从数据库运到DataSet中,同样也可以把DataSet中的信息运送到数据库中。

  我们主要使用 DataAdapter 的 fill 方法来讲数据库的信息运送到 DataSet 中。DataSet 相当于在内存中模拟出一个数据库。所以,从数据库来的信息要同样在 DataSet 中有相应的表(我们一般用数据库中真实的表名来命名)来存储。也就是说,我们要告诉 fill 方法,内存中的目标数据库和目标数据表。需要注意的是,使用 DataAdapter 检索表的全部内容会花费些时间,尤其是在表中有很多行时。这是因为访问数据库,定位和处理数据,然后将数据传输到客户端是需要很长时间的。  

示例:

// Assumes that connection is a valid SqlConnection object.
string queryString = "SELECT CustomerID, CompanyName FROM dbo.Customers";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");

  此示例中所示的代码不显式打开和关闭 Connection。如果 Fill 方法发现连接尚未打开,它将隐式地打开DataAdapter 正在使用的 Connection。如果 Fill 已打开连接,则它还将在 Fill 完成时关闭连接。当处理单一操作(如 Fill 或 Update)时,这可以简化您的代码。但是,执行多项需要打开连接的操作,则可以通过显式调用 Connection 的 Open 方法,对数据源执行操作,然后调用Connection 的 Close 方法。以提高应用程序的性能。应尝试使数据源的连接打开的时间尽可能短,以便释放资源供其他客户端应用程序使用。

  使用方法 fill 的时候,还有其他需要了解的特性。

  1. Fill 填充 DataTable 对象时,会根据 DataTable 是否已经存在来自动创建 DataTable 。具体说明可参考我的另一篇文章 C# DataTable。

  2. 以在同一个 DataTable 上多次使用 Fill 方法。如果主键存在,则传入行会与已有的匹配行合并。如果主键不存在,则传入行会追加到 DataTable 中。如果命令不返回任何行,则不向 DataSet 中添加表,并且不引发异常。

  3. 多次使用方法 fill 。当使用后面的 Fill 调用来刷新 DataSet 的内容时,必须满足以下两个条件:

a. 该 SQL 语句应该与最初用来填充 DataSet 的语句匹配。

b. 必须存在键列信息。

2. DataAdapter 参数 (ADO.NET)

  DbDataAdapter 具有四个用于从数据源检索数据和更新数据源中数据的属性:SelectCommand 属性返回数据源中的数据;InsertCommandUpdateCommand 和 DeleteCommand 属性用于管理数据源中的更改。调用 DataAdapter 的Fill 方法之前必须设置 SelectCommand 属性。在调用 DataAdapter 的 Update 方法之前必须设置InsertCommandUpdateCommand 或 DeleteCommand 属性,具体取决于对 DataTable 中的数据做了哪些更改。例如,如果已添加行,在调用 Update 之前必须设置 InsertCommand。当 Update 正在处理已插入、已更新或已删除的行时,DataAdapter 将使用相应的 Command 属性来处理该操作。有关已修改行的当前信息将通过 Parameters 集合传递到 Command 对象。

具体示例参考我的另一篇博客 C# SqlDataAdapter

 

3. DataAdapter DataTable 和 DataColumn 映射 (ADO.NET)

 略

4. 查询结果分页 (ADO.NET)

 略

 

 

 参考文献:http://msdn.microsoft.com/zh-cn/library/ms254931(v=vs.90)

原文地址:https://www.cnblogs.com/fengkuangshubiaodian/p/2610116.html