DbDataAdapter.FillSchema 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
FillSchema(DataSet, SchemaType, IDbCommand, String, CommandBehavior) |
将 DataTable 添加到指定的 DataSet ,并根据指定的 SchemaType配置架构以匹配数据源中的架构。 |
FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior) |
根据指定的 DataTable、命令字符串以及 SchemaType 值配置指定 CommandBehavior 的架构。 |
FillSchema(DataSet, SchemaType, String) |
将 DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaType 和 DataTable 配置架构以匹配数据源中的架构。 |
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()
参数
- schemaType
- SchemaType
SchemaType 值之一。
- command
- IDbCommand
用于从数据源中检索行的 SQL SELECT 语句。
- srcTable
- String
用于表映射的源表的名称。
- behavior
- CommandBehavior
CommandBehavior 值之一。
返回
DataTable 对象的数组,这些对象包含从数据源返回的架构信息。
注解
方法 FillSchema 使用 SelectCommand从数据源检索架构。 与 关联的 SelectCommand 连接对象必须有效,但不需要打开。 如果在调用 之前 FillSchema 关闭了连接,则会打开该连接以检索数据,然后关闭。 如果连接在调用 之前 FillSchema 处于打开状态,它将保持打开状态。
操作 FillSchema 将 添加到 DataTable 目标 DataSet。 然后,它将列添加到 的 ,DataColumnCollectionDataTable并配置以下DataColumn属性(如果它们存在于数据源中):
FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性:
如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable。
如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollection但 PrimaryKey 未设置 属性。
如果同时返回主键列和唯一列,则主键列将用作 的主键列 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 调用 ,并且 DataSet 仅 DataTable 包含名称仅因大小写而异的 ,则会 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仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill , MissingSchemaAction 并将 设置为 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
参数
- schemaType
- SchemaType
SchemaType 值之一。
- command
- IDbCommand
用于从数据源中检索行的 SQL SELECT 语句。
- behavior
- CommandBehavior
CommandBehavior 值之一。
返回
包含从数据源返回的架构信息的 DataTable 对象。
注解
方法 FillSchema 使用 SelectCommand从数据源检索架构。 与 关联的 SelectCommand 连接对象必须有效,但不需要打开。 如果在调用 之前 FillSchema 关闭了连接,则会打开该连接以检索数据,然后关闭。 如果连接在调用 之前 FillSchema 处于打开状态,它将保持打开状态。
操作 FillSchema 将 添加到 DataTable 目标 DataSet。 然后,它将列添加到 的 ,DataColumnCollectionDataTable并配置以下DataColumn属性(如果它们存在于数据源中):
FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性:
如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable。
如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollection但 PrimaryKey 未设置 属性。
如果同时返回主键列和唯一列,则主键列将用作 的主键列 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仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill , MissingSchemaAction 并将 设置为 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 中,并根据指定的 SchemaType 和 DataTable 配置架构以匹配数据源中的架构。
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()
参数
- schemaType
- SchemaType
SchemaType 值之一,指定如何插入架构。
- srcTable
- String
用于表映射的源表的名称。
返回
一个引用,指向添加到 DataSet 的 DataTable 对象的集合。
例外
找不到从中获取架构的源表。
示例
以下示例使用派生类 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 还根据以下规则配置 PrimaryKey 和 Constraints 属性:
如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable。
如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollection但 PrimaryKey 未设置 属性。
如果同时返回主键列和唯一列,则主键列将用作 的主键列 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 调用 ,并且 DataSet 仅 DataTable 包含名称仅因大小写而异的 ,则会 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仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill , MissingSchemaAction 并将 设置为 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
参数
- 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 还根据以下规则配置 PrimaryKey 和 Constraints 属性:
PrimaryKey如果已为
DataTable
定义 ,或DataTable
包含数据,PrimaryKey
则不会设置 属性。如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列
DataTable
。如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollection但
PrimaryKey
未设置 属性。如果同时返回主键列和唯一列,则主键列将用作 的主键列
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仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill , MissingSchemaAction 并将 设置为 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()
参数
- schemaType
- SchemaType
SchemaType 值之一,指定如何插入架构。
返回
一个引用,指向添加到 DataSet 的 DataTable 对象的集合。
实现
示例
以下示例使用派生类 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 还根据以下规则配置 PrimaryKey 和 Constraints 属性:
如果 一个或多个主键列由 SelectCommand返回,则它们将用作 的主键列 DataTable。
如果未返回任何主键列,但唯一列为 ,则当且仅当所有唯一列都不可取消时,唯一列将用作主键。 如果任一列可为空, UniqueConstraint 则会将 添加到 , ConstraintCollection但 PrimaryKey 未设置 属性。
如果同时返回主键列和唯一列,则主键列将用作 的主键列 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仅检索第一个结果的架构信息。 若要检索多个结果的架构信息,请使用 Fill , MissingSchemaAction 并将 设置为 AddWithKey
。
当使用 FillSchema 时,用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。 用户应该注意潜在的副作用,例如对 SET FMTONLY ON 语句的使用产生的干扰。 有关详细信息,请参阅 SET FMTONLY (Transact-SQL)。