DbDataAdapter.FillSchema 方法

定义

DataTable 添加到 DataSet 中,并配置架构以匹配数据源中的架构。

重载

FillSchema(DataSet, SchemaType, IDbCommand, String, CommandBehavior)

DataTable 添加到指定的 DataSet ,并根据指定的 SchemaType配置架构以匹配数据源中的架构。

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

根据指定的 DataTable、命令字符串以及 SchemaType 值配置指定 CommandBehavior 的架构。

FillSchema(DataSet, SchemaType, String)

DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaTypeDataTable 配置架构以匹配数据源中的架构。

FillSchema(DataTable, SchemaType)

根据指定的 SchemaType 配置指定 DataTable 的架构。

FillSchema(DataSet, SchemaType)

将名为“Table”的 DataTable 添加到指定的 DataSet,并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

FillSchema(DataSet, SchemaType, IDbCommand, String, CommandBehavior)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataTable 添加到指定的 DataSet ,并根据指定的 SchemaType配置架构以匹配数据源中的架构。

protected:
 virtual cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::String ^ srcTable, System::Data::CommandBehavior behavior);
protected virtual System.Data.DataTable[] FillSchema (System.Data.DataSet dataSet, System.Data.SchemaType schemaType, System.Data.IDbCommand command, string srcTable, System.Data.CommandBehavior behavior);
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * System.Data.IDbCommand * string * System.Data.CommandBehavior -> System.Data.DataTable[]
Protected Overridable Function FillSchema (dataSet As DataSet, schemaType As SchemaType, command As IDbCommand, srcTable As String, behavior As CommandBehavior) As DataTable()

参数

dataSet
DataSet

要用数据源中的架构填充的 DataSet

schemaType
SchemaType

SchemaType 值之一。

command
IDbCommand

用于从数据源中检索行的 SQL SELECT 语句。

srcTable
String

用于表映射的源表的名称。

behavior
CommandBehavior

CommandBehavior 值之一。

返回

DataTable 对象的数组,这些对象包含从数据源返回的架构信息。

注解

方法 FillSchema 使用 SelectCommand从数据源检索架构。 与 关联的 SelectCommand 连接对象必须有效,但不需要打开。 如果在调用 之前 FillSchema 关闭了连接,则会打开该连接以检索数据,然后关闭。 如果连接在调用 之前 FillSchema 处于打开状态,它将保持打开状态。

操作 FillSchema 将 添加到 DataTable 目标 DataSet。 然后,它将列添加到 的 ,DataColumnCollectionDataTable并配置以下DataColumn属性(如果它们存在于数据源中):

FillSchema 还根据以下规则配置 PrimaryKeyConstraints 属性:

  • 如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable

  • 如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollectionPrimaryKey 未设置 属性。

  • 如果同时返回主键列和唯一列,则主键列将用作 的主键列 DataTable

请注意,根据上述规则将主键和唯一约束添加到 , ConstraintCollection 但不会添加其他约束类型。

如果在SQL Server表中的列上定义了唯一聚集索引,并且主键约束在一组单独的列上定义,则将返回聚集索引中列的名称。 若要返回主键列的名称,请将查询提示与 SELECT 语句结合使用,该语句指定主键索引的名称。 有关指定查询提示的详细信息,请参阅 Transact-SQL) - 查询 (提示

如果在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。IDataAdapter 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到时, DataSet 每个结果集都放置在单独的表中。 通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等来命名其他结果集。) 。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

方法FillSchema支持包含多个DataTable对象(其名称仅因大小写而异)的方案DataSet。 在这种情况下, FillSchema 执行区分大小写的比较以查找相应的表,如果不存在完全匹配项,则会创建新表。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.  
adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 FillSchema 调用 ,并且 DataSetDataTable 包含名称仅因大小写而异的 ,则会 DataTable 更新。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.  

FillSchema 不返回任何行。 Fill使用 方法将行DataTable添加到 。

注意

处理返回多个结果的批处理 SQL 语句时,针对 OLE DB .NET Framework数据提供程序的 实现FillSchema仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 FillMissingSchemaAction 并将 设置为 AddWithKey

当使用 FillSchema 时,用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。 用户应该注意潜在的副作用,例如对 SET FMTONLY ON 语句的使用产生的干扰。 有关详细信息,请参阅 SET FMTONLY (Transact-SQL)

继承者说明

方法的FillSchema(DataSet, SchemaType)此实现受到保护,设计为供.NET Framework数据提供程序使用。

另请参阅

适用于

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

根据指定的 DataTable、命令字符串以及 SchemaType 值配置指定 CommandBehavior 的架构。

protected:
 virtual System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
protected virtual System.Data.DataTable? FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
protected virtual System.Data.DataTable FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType * System.Data.IDbCommand * System.Data.CommandBehavior -> System.Data.DataTable
Protected Overridable Function FillSchema (dataTable As DataTable, schemaType As SchemaType, command As IDbCommand, behavior As CommandBehavior) As DataTable

参数

dataTable
DataTable

要用数据源中的架构填充的 DataTable

schemaType
SchemaType

SchemaType 值之一。

command
IDbCommand

用于从数据源中检索行的 SQL SELECT 语句。

behavior
CommandBehavior

CommandBehavior 值之一。

返回

包含从数据源返回的架构信息的 DataTable 对象。

注解

方法 FillSchema 使用 SelectCommand从数据源检索架构。 与 关联的 SelectCommand 连接对象必须有效,但不需要打开。 如果在调用 之前 FillSchema 关闭了连接,则会打开该连接以检索数据,然后关闭。 如果连接在调用 之前 FillSchema 处于打开状态,它将保持打开状态。

操作 FillSchema 将 添加到 DataTable 目标 DataSet。 然后,它将列添加到 的 ,DataColumnCollectionDataTable并配置以下DataColumn属性(如果它们存在于数据源中):

FillSchema 还根据以下规则配置 PrimaryKeyConstraints 属性:

  • 如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable

  • 如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollectionPrimaryKey 未设置 属性。

  • 如果同时返回主键列和唯一列,则主键列将用作 的主键列 DataTable

请注意,根据上述规则将主键和唯一约束添加到 , ConstraintCollection 但不会添加其他约束类型。

如果在SQL Server表中的列上定义了唯一聚集索引,并且主键约束在一组单独的列上定义,则将返回聚集索引中列的名称。 若要返回主键列的名称,请将查询提示与 SELECT 语句结合使用,该语句指定主键索引的名称。 有关指定查询提示的详细信息,请参阅 Transact-SQL) - 查询 (提示

如果在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。IDataAdapter 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到时, DataSet 每个结果集都放置在单独的表中。 通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等来命名其他结果集。) 。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

FillSchema 不返回任何行。 Fill使用 方法将行DataTable添加到 。

注意

处理返回多个结果的批处理 SQL 语句时,针对 OLE DB .NET Framework数据提供程序的 实现FillSchema仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 FillMissingSchemaAction 并将 设置为 AddWithKey

当使用 FillSchema 时,用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。 用户应该注意潜在的副作用,例如对 SET FMTONLY ON 语句的使用产生的干扰。 有关详细信息,请参阅 SET FMTONLY (Transact-SQL)

继承者说明

方法的FillSchema(DataSet, SchemaType)此实现受到保护,设计为供.NET Framework数据提供程序使用。

另请参阅

适用于

FillSchema(DataSet, SchemaType, String)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaTypeDataTable 配置架构以匹配数据源中的架构。

public:
 cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::String ^ srcTable);
public System.Data.DataTable[] FillSchema (System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * string -> System.Data.DataTable[]
Public Function FillSchema (dataSet As DataSet, schemaType As SchemaType, srcTable As String) As DataTable()

参数

dataSet
DataSet

要插入架构的 DataSet

schemaType
SchemaType

SchemaType 值之一,指定如何插入架构。

srcTable
String

用于表映射的源表的名称。

返回

一个引用,指向添加到 DataSetDataTable 对象的集合。

例外

找不到从中获取架构的源表。

示例

以下示例使用派生类 SqlDataAdapter来填充 DataSet 架构,并返回 DataSet

public static DataSet GetCustomerData(string dataSetName,
    string connectionString)
{
    DataSet dataSet = new DataSet(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(dataSet, SchemaType.Source, "Customers");
        adapter.Fill(dataSet);

        return dataSet;
    }
}
Private Function GetCustomerData(ByVal dataSetName As String, _
    ByVal connectionString As String) As DataSet

    Dim dataSet As New DataSet(dataSetName)

    Using connection As SqlConnection = New SqlConnection(connectionString)

        Dim adapter As New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(dataSet, SchemaType.Source, "Customers")
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

注解

此方法使用 SelectCommand从数据源检索架构信息。

操作 FillSchema 将 添加到 DataTable 目标 DataSet。 然后,它将列添加到 的 ,DataColumnCollectionDataTable并配置以下DataColumn属性(如果它们存在于数据源中):

FillSchema 还根据以下规则配置 PrimaryKeyConstraints 属性:

  • 如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable

  • 如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollectionPrimaryKey 未设置 属性。

  • 如果同时返回主键列和唯一列,则主键列将用作 的主键列 DataTable

请注意,根据上述规则将主键和唯一约束添加到 , ConstraintCollection 但不会添加其他约束类型。

如果在SQL Server表中的列上定义了唯一聚集索引,并且主键约束在一组单独的列上定义,则将返回聚集索引中列的名称。 若要返回主键列的名称,请将查询提示与 SELECT 语句结合使用,该语句指定主键索引的名称。 有关指定查询提示的详细信息,请参阅 Transact-SQL) - 查询 (提示

主键信息用于查找 Fill 和替换键列匹配的任何行。 如果这不是所需行为,请在不请求架构信息的情况下使用 Fill

如果在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。DbDataAdapter 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到时, DataSet 每个结果集都放置在单独的表中。 通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等来命名其他结果集。) 。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

方法FillSchema支持包含多个DataTable对象(其名称仅因大小写而异)的方案DataSet。 在这种情况下, FillSchema 执行区分大小写的比较以查找相应的表,如果不存在完全匹配项,则会创建新表。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
dataset.Tables.Add("AAA");  
adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.  
adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".  

如果 FillSchema 调用 ,并且 DataSetDataTable 包含名称仅因大小写而异的 ,则会 DataTable 更新。 在此方案中,比较不区分大小写。 以下 C# 代码演示了此行为。

DataSet dataset = new DataSet();  
dataset.Tables.Add("aaa");  
adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.  

IDbConnection select 命令关联的 对象必须有效,但不需要打开。 IDbConnection如果在调用 之前FillSchema关闭 ,则打开它以检索数据,然后关闭。 如果连接在调用 之前 FillSchema 处于打开状态,则连接保持打开状态。

注意

处理返回多个结果的批处理 SQL 语句时,针对 OLE DB .NET Framework数据提供程序的 实现FillSchema仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 FillMissingSchemaAction 并将 设置为 AddWithKey

当使用 FillSchema 时,用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。 用户应该注意潜在的副作用,例如对 SET FMTONLY ON 语句的使用产生的干扰。 有关详细信息,请参阅 SET FMTONLY (Transact-SQL)

另请参阅

适用于

FillSchema(DataTable, SchemaType)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

根据指定的 SchemaType 配置指定 DataTable 的架构。

public:
 System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType);
public System.Data.DataTable? FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
public System.Data.DataTable FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
Public Function FillSchema (dataTable As DataTable, schemaType As SchemaType) As DataTable

参数

dataTable
DataTable

要用数据源中的架构填充的 DataTable

schemaType
SchemaType

SchemaType 值之一。

返回

一个 DataTable,其中包含从数据源返回的架构信息。

示例

以下示例使用派生类 SqlDataAdapter来填充 DataSet 架构,并返回 DataTable

public static DataTable GetCustomerData(string dataSetName,
    string connectionString)
{
    DataTable table = new DataTable(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(table, SchemaType.Mapped);
        adapter.Fill(table);
        return table;
    }
}
Private Function GetCustomerData(ByVal dataTableName As String, _
    ByVal connectionString As String) As DataTable

    Dim table As New DataTable(dataTableName)

    Using connection As SqlConnection = New SqlConnection(connectionString)

        Dim adapter New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(table, SchemaType.Mapped)
        adapter.Fill(table)
        Return table
    End Using
End Function

注解

方法 FillSchema 使用 SelectCommand从数据源检索架构。 与 关联的 SelectCommand 连接对象必须有效,但不需要打开。 如果在调用 之前 FillSchema 关闭了连接,则会打开该连接以检索数据,然后关闭。 如果连接在调用 之前 FillSchema 处于打开状态,它将保持打开状态。

操作 FillSchema 返回 DataTable。 然后,它将列添加到 的 ,DataColumnCollectionDataTable并配置以下DataColumn属性(如果它们存在于数据源中):

FillSchema 还根据以下规则配置 PrimaryKeyConstraints 属性:

  • PrimaryKey如果已为 DataTable定义 ,或 DataTable 包含数据,PrimaryKey则不会设置 属性。

  • 如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable

  • 如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollectionPrimaryKey 未设置 属性。

  • 如果同时返回主键列和唯一列,则主键列将用作 的主键列 DataTable

请注意,根据上述规则将主键和唯一约束添加到 , ConstraintCollection 但不会添加其他约束类型。 此过程可能需要多次往返服务器。

如果在SQL Server表中的列上定义了唯一聚集索引,并且主键约束在一组单独的列上定义,则将返回聚集索引中列的名称。 若要返回主键列的名称,请将查询提示与 SELECT 语句结合使用,该语句指定主键索引的名称。 有关指定查询提示的详细信息,请参阅 Transact-SQL) - 查询 (提示

如果在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。DbDataAdapter 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到时, DataSet 每个结果集都放置在单独的表中。 通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等来命名其他结果集。) 。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

FillSchema 不返回任何行。 Fill使用 方法将行DataTable添加到 。

注意

处理返回多个结果的批处理 SQL 语句时,针对 OLE DB .NET Framework数据提供程序的 实现FillSchema仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 FillMissingSchemaAction 并将 设置为 AddWithKey

当使用 FillSchema 时,用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。 用户应该注意潜在的副作用,例如对 SET FMTONLY ON 语句的使用产生的干扰。 有关详细信息,请参阅 SET FMTONLY (Transact-SQL)

另请参阅

适用于

FillSchema(DataSet, SchemaType)

Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs
Source:
DbDataAdapter.cs

将名为“Table”的 DataTable 添加到指定的 DataSet,并根据指定的 SchemaType 配置架构以匹配数据源中的架构。

public:
 override cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType);
public override System.Data.DataTable[] FillSchema (System.Data.DataSet dataSet, System.Data.SchemaType schemaType);
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
Public Overrides Function FillSchema (dataSet As DataSet, schemaType As SchemaType) As DataTable()

参数

dataSet
DataSet

要插入架构的 DataSet

schemaType
SchemaType

SchemaType 值之一,指定如何插入架构。

返回

一个引用,指向添加到 DataSetDataTable 对象的集合。

实现

示例

以下示例使用派生类 SqlDataAdapter来填充 DataSet 架构,并返回 DataSet

public static DataSet GetCustomerData(string dataSetName,
    string connectionString)
{
    DataSet dataSet = new DataSet(dataSetName);

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter(
            "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);

        DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
        mapping.ColumnMappings.Add("CompanyName", "Name");
        mapping.ColumnMappings.Add("ContactName", "Contact");

        connection.Open();

        adapter.FillSchema(dataSet, SchemaType.Mapped);
        adapter.Fill(dataSet);

        return dataSet;
    }
}
Private Function GetCustomerData(ByVal dataSetName As String, _
    ByVal connectionString As String) As DataSet

    Dim dataSet As New DataSet(dataSetName)

    Using connection As SqlConnection = New SqlConnection(connectionString)
        Dim adapter As New SqlDataAdapter( _
           "SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
           connection)

        Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
           "Table", "Customers")
        mapping.ColumnMappings.Add("CompanyName", "Name")
        mapping.ColumnMappings.Add("ContactName", "Contact")

        connection.Open()

        adapter.FillSchema(dataSet, SchemaType.Mapped)
        adapter.Fill(dataSet)
        Return dataSet
    End Using
End Function

注解

此方法使用 SelectCommand从数据源检索架构信息。

操作 FillSchema 将 添加到 DataTable 目标 DataSet。 然后,它将列添加到 的 ,DataColumnCollectionDataTable并配置以下DataColumn属性(如果它们存在于数据源中):

FillSchema 还根据以下规则配置 PrimaryKeyConstraints 属性:

  • 如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable

  • 如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollectionPrimaryKey 未设置 属性。

  • 如果同时返回主键列和唯一列,则主键列将用作 的主键列 DataTable

请注意,根据上述规则将主键和唯一约束添加到 , ConstraintCollection 但不会添加其他约束类型。

如果在SQL Server表中的列上定义了唯一聚集索引,并且主键约束在一组单独的列上定义,则将返回聚集索引中列的名称。 若要返回主键列的名称,请将查询提示与 SELECT 语句结合使用,该语句指定主键索引的名称。 有关指定查询提示的详细信息,请参阅 Transact-SQL) - 查询 (提示

主键信息用于查找 Fill 和替换键列匹配的任何行。 如果这不是所需行为,请在不请求架构信息的情况下使用 Fill

如果在填充 DataTable时遇到重复列,它将使用模式“columnname1”、“columnname2”、“columnname3”等模式为后续列生成名称。IDataAdapter 如果传入数据包含未命名的列,则根据模式“Column1”、“Column2”等将其放置在 DataSet 中。 将多个结果集添加到时, DataSet 每个结果集都放置在单独的表中。 通过将整型值追加到指定的表名称 (例如“Table”、“Table1”、“Table2”等来命名其他结果集。) 。 如果应用使用列和表名称,请确保没有与这些命名模式冲突。

IDbConnection select 命令关联的 对象必须有效,但不需要打开。 IDbConnection如果在调用 之前FillSchema关闭 ,则打开它以检索数据,然后关闭。 如果连接在调用 之前 FillSchema 处于打开状态,则连接保持打开状态。

注意

处理返回多个结果的批处理 SQL 语句时,针对 OLE DB .NET Framework数据提供程序的 实现FillSchema仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 FillMissingSchemaAction 并将 设置为 AddWithKey

当使用 FillSchema 时,用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。 用户应该注意潜在的副作用,例如对 SET FMTONLY ON 语句的使用产生的干扰。 有关详细信息,请参阅 SET FMTONLY (Transact-SQL)

另请参阅

适用于