DbDataAdapter.Fill 方法 (DataSet, String)

DataSet 中添加或刷新行以匹配使用 DataSetDataTable 名称的数据源中的行。

命名空间:  System.Data.Common
程序集:  System.Data(在 System.Data.dll 中)

语法

public int Fill(
DataSet dataSet,
string srcTable
)

参数

dataSet
类型:System.Data.DataSet
要用记录和架构(如有必要)填充的 DataSet
srcTable
类型:System.String
用于表映射的源表的名称。

返回值

类型:System.Int32
已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
异常

异常条件
SystemException

源表无效。

备注

Fill 方法使用 SELECT 语句从数据源中检索数据。与 Select 命令关联的 IDbConnection 对象必须有效,但不需要将其打开。如果调用 Fill 之前 IDbConnection 已关闭,则将其打开以检索数据,然后再将其关闭。如果调用 Fill 之前连接已打开,它将保持打开状态。

如果命令不返回任何行,则不向 DataSet 中添加表,并且不引发异常。

如果 DbDataAdapter 对象在填充 DataTable 时遇到重复列,它将以“columnname1”、“columnname2”、“columnname3”这样依次排序的模式命名后面的列。如果传入数据包含未命名的列,它们将按“Column1”、“Column2”的模式放在 DataSet 中。

当指定的查询返回多项结果时,每个结果集都放置在单独的表中。将整数值追加到指定的表名从而对其他结果集进行命名(例如“Table”、“Table1”、“Table2”等)。如果某个查询不返回行,则不会为该查询创建表,因此,如果您先处理一个插入查询,然后再处理一个选择查询,那么由于为选择查询创建的表是第一个表,所以该表将被命名为“Table”。使用列名和表名的应用程序应确保一定不要与这些命名模式发生冲突。

Fill 方法支持以下情况:DataSet 包含多个 DataTable 对象,而这些对象的名称只有大小写不同。在这种情况下,Fill 执行区分大小写的比较以查找相应的表,如果不存在完全匹配的表,则新建一个。下面的 C# 代码阐释该行为。

DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
dataset.Tables.Add("AAA");
adapter.Fill(dataset, "aaa"); // Fills "aaa", which already exists in the DataSet.
adapter.Fill(dataset, "Aaa"); // Adds a new table called "Aaa".如果调用 Fill 并且 DataSet 只包含一个其名称只有大小写不同的 DataTable,则更新该 DataTable。在这种情况下,比较不区分大小写。下面的 C# 代码阐释该行为。
DataSet dataset = new DataSet();
 dataset.Tables.Add("aaa");
adapter.Fill(dataset, "AAA"); // Fills table "aaa" because only one similarly named table is in the DataSet.

如果在填充数据表时遇到错误或异常,则错误发生之前添加的行将保留在数据表中。操作的剩余部分被中止。

当用于填充 DataSet 的 SELECT 语句(例如批处理 SQL 语句)返回多项结果时,请注意以下事项:

如果其中一项结果包含错误,则将跳过所有后面的结果而不将其添加到 DataSet 中。

当使用后面的 Fill 调用来刷新 DataSet 的内容时,必须满足以下两个条件:
  1. 该 SQL 语句应该与最初用来填充 DataSet 的语句匹配。

  2. 必须存在键列信息。如果主键信息存在,则协调任何重复的行,并且这些重复行将只在与 DataSet 对应的 DataTable 中出现一次。可以通过 FillSchema(通过指定 DataTablePrimaryKey 属性),或者通过将 MissingSchemaAction 属性设置为 AddWithKey 来设置主键信息。

如果 SelectCommand 返回 OUTER JOIN 的结果,则 DataAdapter 不为生成的 DataTable 设置 PrimaryKey 值。必须显式定义主键,确保正确地解析重复行。有关更多信息,请参见定义主键 (ADO.NET)

y4b211hz.alert_note(zh-cn,VS.90).gif说明:

当处理返回多项结果的批处理 SQL 语句时,用于 OLE DB 的 .NET Framework 数据提供程序的 FillSchema 的实现只为第一项结果检索架构信息。若要为多项结果检索架构信息,请使用 MissingSchemaAction 设置为 AddWithKeyFill

对继承者的说明:

重写派生类中的 Fill 时,确保调用基类的 Fill 方法。

示例

下面的示例使用派生类 OleDbDataAdapter,利用 categories 表中的行来填充 DataSet。此示例假定您已经创建了一个 OleDbDataAdapter 和一个 DataSet

public void GetRecords()
{
// ...
// create dataSet and adapter
// ...
adapter.Fill(dataSet, "Categories");
}

个人总结:DataAdapter.Fill()参数各有不同,而此种DataAdapter.Fill(dataset,string),则是将将DataAdapter中的数据,填充到dataset的名为string表中!
完毕


原文地址:https://www.cnblogs.com/xfiver/p/1729656.html