zoukankan      html  css  js  c++  java
  • 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表中!
    完毕


  • 相关阅读:
    IntelliJ IDEA常用统一设置2-Inspections检查设置(Linux/Mac/Windows)
    IntelliJ IDEA版本:Ultimate、Community、EAP版本的区别
    IntelliJ IDEA重构技巧收集
    Java泛型中的类型擦除机制简单理解
    阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义
    Java中PO、BO、VO、DTO、POJO、DAO概念及其作用和项目实例图(转)
    Java使用logback记录日志时分级别保存文件
    Java中List,Set和Map详解及其区别和使用场景(转)
    Java中泛型的Class<Object>与Class<?>的区别(转)
    Java中泛型T和Class<T>以及Class<?>的理解(转)
  • 原文地址:https://www.cnblogs.com/xfiver/p/1729656.html
Copyright © 2011-2022 走看看