DbDataAdapter.FillSchema Método

Definición

Agrega DataTable a DataSet y configura el esquema para hacerlo coincidir con el del origen de datos.Adds a DataTable to a DataSet and configures the schema to match that in the data source.

Sobrecargas

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

Agrega un elemento DataTable denominado "Table" para el elemento DataSet especificado y configura el esquema para que coincida con el origen de datos basado en el SchemaType.Adds a DataTable to the specified DataSet and configures the schema to match that in the data source based on the specified SchemaType.

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Configura el esquema de la tabla DataTable especificada en función del SchemaType, la cadena de comando y los valores de CommandBehavior especificados.Configures the schema of the specified DataTable based on the specified SchemaType, command string, and CommandBehavior values.

FillSchema(DataSet, SchemaType, String)

Agrega un elemento DataTable denominado "Table" para el elemento DataSet especificado y configura el esquema para que coincida con el del origen de datos basado en los elementos especificados SchemaType y DataTable.Adds a DataTable to the specified DataSet and configures the schema to match that in the data source based upon the specified SchemaType and DataTable.

FillSchema(DataTable, SchemaType)

Configura el esquema del elemento DataTable especificado en función del elemento SchemaType especificado.Configures the schema of the specified DataTable based on the specified SchemaType.

FillSchema(DataSet, SchemaType)

Agrega una DataTable denominada "Table" para el DataSet especificado y configura el esquema para que coincida con el origen de datos basado en el SchemaType especificado.Adds a DataTable named "Table" to the specified DataSet and configures the schema to match that in the data source based on the specified SchemaType.

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

Agrega un elemento DataTable denominado "Table" para el elemento DataSet especificado y configura el esquema para que coincida con el origen de datos basado en el SchemaType.Adds a DataTable to the specified DataSet and configures the schema to match that in the data source based on the specified 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()

Parámetros

dataSet
DataSet

DataSet que se debe rellenar con el esquema del origen de datos.The DataSet to be filled with the schema from the data source.

schemaType
SchemaType

Uno de los valores de SchemaType.One of the SchemaType values.

command
IDbCommand

Instrucción SELECT de SQL utilizada para recuperar las filas del origen de datos.The SQL SELECT statement used to retrieve rows from the data source.

srcTable
String

Nombre de la tabla de origen que se utilizará para la asignación de tabla.The name of the source table to use for table mapping.

behavior
CommandBehavior

Uno de los valores de CommandBehavior.One of the CommandBehavior values.

Devoluciones

DataTable[]

Matriz de objetos DataTable que contienen la información de esquema devuelta a partir del origen de datos.An array of DataTable objects that contain schema information returned from the data source.

Comentarios

El FillSchema método recupera el esquema del origen de datos mediante SelectCommand .The FillSchema method retrieves the schema from the data source using the SelectCommand. El objeto de conexión asociado a SelectCommand debe ser válido, pero no es necesario que esté abierto.The connection object associated with the SelectCommand must be valid, but it does not need to be open. Si la conexión se cierra antes de que FillSchema se llame a, se abre para recuperar los datos y, a continuación, se cierra.If the connection is closed before FillSchema is called, it is opened to retrieve data, then closed. Si la conexión está abierta antes FillSchema de que se llame a, permanece abierta.If the connection is open before FillSchema is called, it remains open.

Una FillSchema operación agrega un DataTable al destino DataSet .A FillSchema operation adds a DataTable to the destination DataSet. A continuación, agrega columnas a la DataColumnCollection de y DataTable configura las siguientes DataColumn propiedades si existen en el origen de datos:It then adds columns to the DataColumnCollection of the DataTable, and configures the following DataColumn properties if they exist at the data source:

FillSchema también configura las PrimaryKey Constraints propiedades y según las siguientes reglas:FillSchema also configures the PrimaryKey and Constraints properties according to the following rules:

  • Si devuelve una o más columnas de clave principal SelectCommand , se usan como columnas de clave principal para DataTable .If one or more primary key columns are returned by the SelectCommand, they are used as the primary key columns for the DataTable.

  • Si no se devuelven columnas de clave principal pero las columnas únicas son, las columnas únicas se usan como clave principal si, y solo si, todas las columnas únicas no aceptan valores NULL.If no primary key columns are returned but unique columns are, the unique columns are used as the primary key if, and only if, all the unique columns are nonnullable. Si alguna de las columnas admite valores NULL, UniqueConstraint se agrega a ConstraintCollection , pero PrimaryKey no se establece la propiedad.If any of the columns are nullable, a UniqueConstraint is added to the ConstraintCollection, but the PrimaryKey property is not set.

  • Si se devuelven las columnas de clave principal y las columnas únicas, las columnas de clave principal se usan como columnas de clave principal para DataTable .If both primary key columns and unique columns are returned, the primary key columns are used as the primary key columns for the DataTable.

Tenga en cuenta que las claves principales y las restricciones únicas se agregan a ConstraintCollection según las reglas anteriores, pero no se agregan otros tipos de restricción.Note that primary keys and unique constraints are added to the ConstraintCollection according to the preceding rules, but other constraint types are not added.

Si se define un índice clúster único en una o varias columnas de una tabla de SQL Server y la restricción Primary Key se define en un conjunto independiente de columnas, se devolverán los nombres de las columnas del índice clúster.If a unique clustered index is defined on a column or columns in a SQL Server table and the primary key constraint is defined on a separate set of columns, then the names of the columns in the clustered index will be returned. Para devolver el nombre o los nombres de las columnas de clave principal, use una sugerencia de consulta con la instrucción SELECT que especifica el nombre del índice de clave principal.To return the name or names of the primary key columns, use a query hint with the SELECT statement that specifies the name of the primary key index. Para obtener más información sobre cómo especificar sugerencias de consulta, vea hints (Transact-SQL)-Query.For more information about specifying query hints, see Hints (Transact-SQL) - Query.

Si IDataAdapter encuentra columnas duplicadas al rellenar una DataTable , genera nombres para las columnas siguientes, con el patrón "columnName 1", "columnName 2", "columnName 3", etc.If the IDataAdapter encounters duplicate columns while populating a DataTable, it generates names for the subsequent columns, using the pattern "columnname 1", "columnname 2", "columnname 3", and so on. Si los datos entrantes contienen columnas sin nombre, se colocan en DataSet según el patrón "Column1", "columna2", etc.If the incoming data contains unnamed columns, they are placed in the DataSet according to the pattern "Column1", "Column2", and so on. Cuando se agregan varios conjuntos de resultados a DataSet cada conjunto de resultados, se coloca en una tabla independiente.When multiple result sets are added to the DataSet each result set is placed in a separate table. Los conjuntos de resultados adicionales se denominan anexando valores enteros al nombre de tabla especificado (por ejemplo, "Table", "Table1", "Tabla2", etc.).Additional result sets are named by appending integral values to the specified table name (for example, "Table", "Table1", "Table2", and so on.). Las aplicaciones que usan nombres de tabla y columna deben garantizar que no se produzcan conflictos con estos patrones de nomenclatura.Applications using column and table names should ensure that conflicts with these naming patterns does not occur.

El FillSchema método admite escenarios en los que el DataSet contiene varios DataTable objetos cuyos nombres solo se diferencian en el uso de mayúsculas y minúsculas.The FillSchema method supports scenarios where the DataSet contains multiple DataTable objects whose names differ only by case. En tales situaciones, FillSchema realiza una comparación que distingue entre mayúsculas y minúsculas para encontrar la tabla correspondiente y crea una nueva tabla si no existe ninguna coincidencia exacta.In such situations, FillSchema performs a case-sensitive comparison to find the corresponding table, and creates a new table if no exact match exists. En el siguiente código de C# se muestra este comportamiento.The following C# code illustrates this behavior.

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".  

Si FillSchema se llama a y DataSet contiene solo uno DataTable cuyo nombre difiere solo en caso de que DataTable se actualice.If FillSchema is called and the DataSet contains only one DataTable whose name differs only by case, that DataTable is updated. En este escenario, la comparación no distingue entre mayúsculas y minúsculas.In this scenario, the comparison is case insensitive. En el siguiente código de C# se muestra este comportamiento.The following C# code illustrates this behavior.

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 no devuelve ninguna fila.FillSchema does not return any rows. Utilice el Fill método para agregar filas a un DataTable .Use the Fill method to add rows to a DataTable.

Nota

Al controlar instrucciones SQL por lotes que devuelven varios resultados, la implementación de FillSchema para el proveedor de datos de .NET Framework para OLE DB recupera información de esquema solo para el primer resultado.When handling batch SQL statements that return multiple results, the implementation of FillSchema for the .NET Framework Data Provider for OLE DB retrieves schema information for only the first result. Para recuperar información de esquema para varios resultados, use Fill con el MissingSchemaAction establecido en AddWithKey .To retrieve schema information for multiple results, use Fill with the MissingSchemaAction set to AddWithKey.

Cuando se utiliza el método FillSchema, el proveedor de datos de .NET Framework para SQL Server agrega una cláusula FOR BROWSE a la instrucción que se está ejecutando.When using FillSchema, the .NET Framework Data Provider for SQL Server appends a FOR BROWSE clause to the statement being executed. El usuario debe tener en cuenta los posibles efectos secundarios, como las interferencias con el uso de las instrucciones SET FMTONLY ON.The user should be aware of potential side effects, such as interference with the use of SET FMTONLY ON statements. Para obtener más información, vea SET FMTONLY (Transact-SQL).For more information, see SET FMTONLY (Transact-SQL).

Notas a los desarrolladores de herederos

Esta implementación del FillSchema(DataSet, SchemaType) método está protegida y está diseñada para su uso por parte de un proveedor de datos de .NET Framework.This implementation of the FillSchema(DataSet, SchemaType) method is protected and is designed for use by a .NET Framework data provider.

Se aplica a

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Configura el esquema de la tabla DataTable especificada en función del SchemaType, la cadena de comando y los valores de CommandBehavior especificados.Configures the schema of the specified DataTable based on the specified SchemaType, command string, and CommandBehavior values.

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

Parámetros

dataTable
DataTable

DataTable que se debe rellenar con el esquema del origen de datos.The DataTable to be filled with the schema from the data source.

schemaType
SchemaType

Uno de los valores de SchemaType.One of the SchemaType values.

command
IDbCommand

Instrucción SELECT de SQL utilizada para recuperar las filas del origen de datos.The SQL SELECT statement used to retrieve rows from the data source.

behavior
CommandBehavior

Uno de los valores de CommandBehavior.One of the CommandBehavior values.

Devoluciones

DataTable

Objeto DataTable que contiene la información de esquema devuelta desde el origen de datos.A of DataTable object that contains schema information returned from the data source.

Comentarios

El FillSchema método recupera el esquema del origen de datos mediante SelectCommand .The FillSchema method retrieves the schema from the data source using the SelectCommand. El objeto de conexión asociado a SelectCommand debe ser válido, pero no es necesario que esté abierto.The connection object associated with the SelectCommand must be valid, but it does not need to be open. Si la conexión se cierra antes de que FillSchema se llame a, se abre para recuperar los datos y, a continuación, se cierra.If the connection is closed before FillSchema is called, it is opened to retrieve data, then closed. Si la conexión está abierta antes FillSchema de que se llame a, permanece abierta.If the connection is open before FillSchema is called, it remains open.

Una FillSchema operación agrega un DataTable al destino DataSet .A FillSchema operation adds a DataTable to the destination DataSet. A continuación, agrega columnas a la DataColumnCollection de y DataTable configura las siguientes DataColumn propiedades si existen en el origen de datos:It then adds columns to the DataColumnCollection of the DataTable, and configures the following DataColumn properties if they exist at the data source:

FillSchema también configura las PrimaryKey Constraints propiedades y según las siguientes reglas:FillSchema also configures the PrimaryKey and Constraints properties according to the following rules:

  • Si devuelve una o más columnas de clave principal SelectCommand , se usan como columnas de clave principal para DataTable .If one or more primary key columns are returned by the SelectCommand, they are used as the primary key columns for the DataTable.

  • Si no se devuelven columnas de clave principal pero las columnas únicas son, las columnas únicas se usan como clave principal si, y solo si, todas las columnas únicas no aceptan valores NULL.If no primary key columns are returned but unique columns are, the unique columns are used as the primary key if, and only if, all the unique columns are nonnullable. Si alguna de las columnas admite valores NULL, UniqueConstraint se agrega a ConstraintCollection , pero PrimaryKey no se establece la propiedad.If any of the columns are nullable, a UniqueConstraint is added to the ConstraintCollection, but the PrimaryKey property is not set.

  • Si se devuelven las columnas de clave principal y las columnas únicas, las columnas de clave principal se usan como columnas de clave principal para DataTable .If both primary key columns and unique columns are returned, the primary key columns are used as the primary key columns for the DataTable.

Tenga en cuenta que las claves principales y las restricciones únicas se agregan a ConstraintCollection según las reglas anteriores, pero no se agregan otros tipos de restricción.Note that primary keys and unique constraints are added to the ConstraintCollection according to the preceding rules, but other constraint types are not added.

Si se define un índice clúster único en una o varias columnas de una tabla de SQL Server y la restricción Primary Key se define en un conjunto independiente de columnas, se devolverán los nombres de las columnas del índice clúster.If a unique clustered index is defined on a column or columns in a SQL Server table and the primary key constraint is defined on a separate set of columns, then the names of the columns in the clustered index will be returned. Para devolver el nombre o los nombres de las columnas de clave principal, use una sugerencia de consulta con la instrucción SELECT que especifica el nombre del índice de clave principal.To return the name or names of the primary key columns, use a query hint with the SELECT statement that specifies the name of the primary key index. Para obtener más información sobre cómo especificar sugerencias de consulta, vea hints (Transact-SQL)-Query.For more information about specifying query hints, see Hints (Transact-SQL) - Query.

Si IDataAdapter encuentra columnas duplicadas al rellenar una DataTable , genera nombres para las columnas siguientes, con el patrón "columnName 1", "columnName 2", "columnName 3", etc.If the IDataAdapter encounters duplicate columns while populating a DataTable, it generates names for the subsequent columns, using the pattern "columnname 1", "columnname 2", "columnname 3", and so on. Si los datos entrantes contienen columnas sin nombre, se colocan en DataSet según el patrón "Column1", "columna2", etc.If the incoming data contains unnamed columns, they are placed in the DataSet according to the pattern "Column1", "Column2", and so on. Cuando se agregan varios conjuntos de resultados a DataSet cada conjunto de resultados, se coloca en una tabla independiente.When multiple result sets are added to the DataSet each result set is placed in a separate table. Los conjuntos de resultados adicionales se denominan anexando valores enteros al nombre de tabla especificado (por ejemplo, "Table", "Table1", "Tabla2", etc.).Additional result sets are named by appending integral values to the specified table name (for example, "Table", "Table1", "Table2", and so on.). Las aplicaciones que usan nombres de tabla y columna deben garantizar que no se produzcan conflictos con estos patrones de nomenclatura.Applications using column and table names should ensure that conflicts with these naming patterns does not occur.

FillSchema no devuelve ninguna fila.FillSchema does not return any rows. Utilice el Fill método para agregar filas a un DataTable .Use the Fill method to add rows to a DataTable.

Nota

Al controlar instrucciones SQL por lotes que devuelven varios resultados, la implementación de FillSchema para el proveedor de datos de .NET Framework para OLE DB recupera información de esquema solo para el primer resultado.When handling batch SQL statements that return multiple results, the implementation of FillSchema for the .NET Framework Data Provider for OLE DB retrieves schema information for only the first result. Para recuperar información de esquema para varios resultados, use Fill con el MissingSchemaAction establecido en AddWithKey .To retrieve schema information for multiple results, use Fill with the MissingSchemaAction set to AddWithKey.

Cuando se utiliza el método FillSchema, el proveedor de datos de .NET Framework para SQL Server agrega una cláusula FOR BROWSE a la instrucción que se está ejecutando.When using FillSchema, the .NET Framework Data Provider for SQL Server appends a FOR BROWSE clause to the statement being executed. El usuario debe tener en cuenta los posibles efectos secundarios, como las interferencias con el uso de las instrucciones SET FMTONLY ON.The user should be aware of potential side effects, such as interference with the use of SET FMTONLY ON statements. Para obtener más información, vea SET FMTONLY (Transact-SQL).For more information, see SET FMTONLY (Transact-SQL).

Notas a los desarrolladores de herederos

Esta implementación del FillSchema(DataSet, SchemaType) método está protegida y está diseñada para su uso por parte de un proveedor de datos de .NET Framework.This implementation of the FillSchema(DataSet, SchemaType) method is protected and is designed for use by a .NET Framework data provider.

Se aplica a

FillSchema(DataSet, SchemaType, String)

Agrega un elemento DataTable denominado "Table" para el elemento DataSet especificado y configura el esquema para que coincida con el del origen de datos basado en los elementos especificados SchemaType y DataTable.Adds a DataTable to the specified DataSet and configures the schema to match that in the data source based upon the specified SchemaType and 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()

Parámetros

dataSet
DataSet

DataSet en el que se va a insertar el esquema.A DataSet to insert the schema in.

schemaType
SchemaType

Uno de los valores SchemaType que especifica cómo insertar el esquema.One of the SchemaType values that specify how to insert the schema.

srcTable
String

Nombre de la tabla de origen que se utilizará para la asignación de tabla.The name of the source table to use for table mapping.

Devoluciones

DataTable[]

Referencia a una colección de objetos DataTable que se agregaron al DataSet.A reference to a collection of DataTable objects that were added to the DataSet.

Excepciones

No se encontró una tabla de origen desde la que se pueda obtener el esquema.A source table from which to get the schema could not be found.

Ejemplos

En el ejemplo siguiente se usa la clase derivada, SqlDataAdapter , para rellenar DataSet con el esquema y devuelve un DataSet .The following example uses the derived class, SqlDataAdapter, to fill a DataSet with the schema, and returns a 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

Comentarios

Este método recupera la información de esquema del origen de datos mediante SelectCommand .This method retrieves the schema information from the data source using the SelectCommand.

Una FillSchema operación agrega un DataTable al destino DataSet .A FillSchema operation adds a DataTable to the destination DataSet. A continuación, agrega columnas a la DataColumnCollection de y DataTable configura las siguientes DataColumn propiedades si existen en el origen de datos:It then adds columns to the DataColumnCollection of the DataTable, and configures the following DataColumn properties if they exist at the data source:

FillSchema también configura las PrimaryKey Constraints propiedades y según las siguientes reglas:FillSchema also configures the PrimaryKey and Constraints properties according to the following rules:

  • Si devuelve una o más columnas de clave principal SelectCommand , se usan como columnas de clave principal para DataTable .If one or more primary key columns are returned by the SelectCommand, they are used as the primary key columns for the DataTable.

  • Si no se devuelven columnas de clave principal pero las columnas únicas son, las columnas únicas se usan como clave principal si, y solo si, todas las columnas únicas no aceptan valores NULL.If no primary key columns are returned but unique columns are, the unique columns are used as the primary key if, and only if, all the unique columns are nonnullable. Si alguna de las columnas admite valores NULL, UniqueConstraint se agrega a ConstraintCollection , pero PrimaryKey no se establece la propiedad.If any of the columns are nullable, a UniqueConstraint is added to the ConstraintCollection, but the PrimaryKey property is not set.

  • Si se devuelven las columnas de clave principal y las columnas únicas, las columnas de clave principal se usan como columnas de clave principal para DataTable .If both primary key columns and unique columns are returned, the primary key columns are used as the primary key columns for the DataTable.

Tenga en cuenta que las claves principales y las restricciones únicas se agregan a ConstraintCollection según las reglas anteriores, pero no se agregan otros tipos de restricción.Note that primary keys and unique constraints are added to the ConstraintCollection according to the preceding rules, but other constraint types are not added.

Si se define un índice clúster único en una o varias columnas de una tabla de SQL Server y la restricción Primary Key se define en un conjunto independiente de columnas, se devolverán los nombres de las columnas del índice clúster.If a unique clustered index is defined on a column or columns in a SQL Server table and the primary key constraint is defined on a separate set of columns, then the names of the columns in the clustered index will be returned. Para devolver el nombre o los nombres de las columnas de clave principal, use una sugerencia de consulta con la instrucción SELECT que especifica el nombre del índice de clave principal.To return the name or names of the primary key columns, use a query hint with the SELECT statement that specifies the name of the primary key index. Para obtener más información sobre cómo especificar sugerencias de consulta, vea hints (Transact-SQL)-Query.For more information about specifying query hints, see Hints (Transact-SQL) - Query.

La información de clave principal se utiliza durante Fill para buscar y reemplazar las filas cuyas columnas de clave coinciden.Primary key information is used during Fill to find and replace any rows whose key columns match. Si este no es el comportamiento deseado, use Fill sin solicitar información de esquema.If this is not the desired behavior, use Fill without requesting schema information.

Si DbDataAdapter encuentra columnas duplicadas al rellenar una DataTable , genera nombres para las columnas siguientes, con el patrón "columnName 1", "columnName 2", "columnName 3", etc.If the DbDataAdapter encounters duplicate columns while populating a DataTable, it generates names for the subsequent columns, using the pattern "columnname 1", "columnname 2", "columnname 3", and so on. Si los datos entrantes contienen columnas sin nombre, se colocan en DataSet según el patrón "Column1", "columna2", etc.If the incoming data contains unnamed columns, they are placed in the DataSet according to the pattern "Column1", "Column2", and so on. Cuando se agregan varios conjuntos de resultados a DataSet cada conjunto de resultados, se coloca en una tabla independiente.When multiple result sets are added to the DataSet each result set is placed in a separate table. Los conjuntos de resultados adicionales se denominan anexando valores enteros al nombre de tabla especificado (por ejemplo, "Table", "Table1", "Tabla2", etc.).Additional result sets are named by appending integral values to the specified table name (for example, "Table", "Table1", "Table2", and so on.). Las aplicaciones que usan nombres de tabla y columna deben garantizar que no se produzcan conflictos con estos patrones de nomenclatura.Applications using column and table names should ensure that conflicts with these naming patterns does not occur.

El FillSchema método admite escenarios en los que el DataSet contiene varios DataTable objetos cuyos nombres solo se diferencian en el uso de mayúsculas y minúsculas.The FillSchema method supports scenarios where the DataSet contains multiple DataTable objects whose names differ only by case. En tales situaciones, FillSchema realiza una comparación que distingue entre mayúsculas y minúsculas para encontrar la tabla correspondiente y crea una nueva tabla si no existe ninguna coincidencia exacta.In such situations, FillSchema performs a case-sensitive comparison to find the corresponding table, and creates a new table if no exact match exists. En el siguiente código de C# se muestra este comportamiento.The following C# code illustrates this behavior.

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".  

Si FillSchema se llama a y DataSet contiene solo uno DataTable cuyo nombre difiere solo en caso de que DataTable se actualice.If FillSchema is called and the DataSet contains only one DataTable whose name differs only by case, that DataTable is updated. En este escenario, la comparación no distingue entre mayúsculas y minúsculas.In this scenario, the comparison is case insensitive. En el siguiente código de C# se muestra este comportamiento.The following C# code illustrates this behavior.

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.  

El IDbConnection objeto asociado al comando SELECT debe ser válido, pero no es necesario abrirlo.The IDbConnection object associated with the select command must be valid, but it does not need to open. Si el IDbConnection está cerrado antes de FillSchema llamar a, se abre para recuperar los datos y, a continuación, se cierra.If the IDbConnection is closed before FillSchema is called, it is opened to retrieve data, then closed. Si la conexión está abierta antes FillSchema de que se llame a, se deja abierta.If the connection is open before FillSchema is called, it is left open.

Nota

Al controlar instrucciones SQL por lotes que devuelven varios resultados, la implementación de FillSchema para el proveedor de datos de .NET Framework para OLE DB recupera información de esquema solo para el primer resultado.When handling batch SQL statements that return multiple results, the implementation of FillSchema for the .NET Framework Data Provider for OLE DB retrieves schema information for only the first result. Para recuperar información de esquema para varios resultados, use Fill con el MissingSchemaAction establecido en AddWithKey .To retrieve schema information for multiple results, use Fill with the MissingSchemaAction set to AddWithKey.

Cuando se utiliza el método FillSchema, el proveedor de datos de .NET Framework para SQL Server agrega una cláusula FOR BROWSE a la instrucción que se está ejecutando.When using FillSchema, the .NET Framework Data Provider for SQL Server appends a FOR BROWSE clause to the statement being executed. El usuario debe tener en cuenta los posibles efectos secundarios, como las interferencias con el uso de las instrucciones SET FMTONLY ON.The user should be aware of potential side effects, such as interference with the use of SET FMTONLY ON statements. Para obtener más información, vea SET FMTONLY (Transact-SQL).For more information, see SET FMTONLY (Transact-SQL).

Se aplica a

FillSchema(DataTable, SchemaType)

Configura el esquema del elemento DataTable especificado en función del elemento SchemaType especificado.Configures the schema of the specified DataTable based on the specified 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);
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

Parámetros

dataTable
DataTable

DataTable que se debe rellenar con el esquema del origen de datos.The DataTable to be filled with the schema from the data source.

schemaType
SchemaType

Uno de los valores de SchemaType.One of the SchemaType values.

Devoluciones

DataTable

DataTable que contiene información de esquema devuelta desde el origen de datos.A DataTable that contains schema information returned from the data source.

Ejemplos

En el ejemplo siguiente se usa la clase derivada, SqlDataAdapter , para rellenar DataSet con el esquema y devuelve un DataTable .The following example uses the derived class, SqlDataAdapter, to fill a DataSet with the schema, and returns a 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

Comentarios

El FillSchema método recupera el esquema del origen de datos mediante SelectCommand .The FillSchema method retrieves the schema from the data source using the SelectCommand. El objeto de conexión asociado a SelectCommand debe ser válido, pero no es necesario que esté abierto.The connection object associated with the SelectCommand must be valid, but it does not need to be open. Si la conexión se cierra antes de que FillSchema se llame a, se abre para recuperar los datos y, a continuación, se cierra.If the connection is closed before FillSchema is called, it is opened to retrieve data, then closed. Si la conexión está abierta antes FillSchema de que se llame a, permanece abierta.If the connection is open before FillSchema is called, it remains open.

Una FillSchema operación devuelve un DataTable .A FillSchema operation returns a DataTable. A continuación, agrega columnas a la DataColumnCollection de y DataTable configura las siguientes DataColumn propiedades si existen en el origen de datos:It then adds columns to the DataColumnCollection of the DataTable, and configures the following DataColumn properties if they exist at the data source:

FillSchema también configura las PrimaryKey Constraints propiedades y según las siguientes reglas:FillSchema also configures the PrimaryKey and Constraints properties according to the following rules:

  • Si ya se ha PrimaryKey definido un para el DataTable , o DataTable contiene datos, PrimaryKey no se establecerá la propiedad.If a PrimaryKey has already been defined for the DataTable, or the DataTable contains data, the PrimaryKey property will not be set.

  • Si devuelve una o más columnas de clave principal SelectCommand , se usan como columnas de clave principal para DataTable .If one or more primary key columns are returned by the SelectCommand, they are used as the primary key columns for the DataTable.

  • Si no se devuelven columnas de clave principal pero las columnas únicas son, las columnas únicas se usan como clave principal si, y solo si, todas las columnas únicas no aceptan valores NULL.If no primary key columns are returned but unique columns are, the unique columns are used as the primary key if, and only if, all the unique columns are nonnullable. Si alguna de las columnas admite valores NULL, UniqueConstraint se agrega a ConstraintCollection , pero PrimaryKey no se establece la propiedad.If any of the columns are nullable, a UniqueConstraint is added to the ConstraintCollection, but the PrimaryKey property is not set.

  • Si se devuelven las columnas de clave principal y las columnas únicas, las columnas de clave principal se usan como columnas de clave principal para DataTable .If both primary key columns and unique columns are returned, the primary key columns are used as the primary key columns for the DataTable.

Tenga en cuenta que las claves principales y las restricciones únicas se agregan a ConstraintCollection según las reglas anteriores, pero no se agregan otros tipos de restricción.Note that primary keys and unique constraints are added to the ConstraintCollection according to the preceding rules, but other constraint types are not added. Este proceso puede requerir varios recorridos de ida y vuelta al servidor.This process may require several round-trips to the server.

Si se define un índice clúster único en una o varias columnas de una tabla de SQL Server y la restricción Primary Key se define en un conjunto independiente de columnas, se devolverán los nombres de las columnas del índice clúster.If a unique clustered index is defined on a column or columns in a SQL Server table and the primary key constraint is defined on a separate set of columns, then the names of the columns in the clustered index will be returned. Para devolver el nombre o los nombres de las columnas de clave principal, use una sugerencia de consulta con la instrucción SELECT que especifica el nombre del índice de clave principal.To return the name or names of the primary key columns, use a query hint with the SELECT statement that specifies the name of the primary key index. Para obtener más información sobre cómo especificar sugerencias de consulta, vea hints (Transact-SQL)-Query.For more information about specifying query hints, see Hints (Transact-SQL) - Query.

Si DbDataAdapter encuentra columnas duplicadas al rellenar una DataTable , genera nombres para las columnas siguientes, con el patrón "columnName 1", "columnName 2", "columnName 3", etc.If the DbDataAdapter encounters duplicate columns while populating a DataTable, it generates names for the subsequent columns, using the pattern "columnname 1", "columnname 2", "columnname 3", and so on. Si los datos entrantes contienen columnas sin nombre, se colocan en DataSet según el patrón "Column1", "columna2", etc.If the incoming data contains unnamed columns, they are placed in the DataSet according to the pattern "Column1", "Column2", and so on. Cuando se agregan varios conjuntos de resultados a DataSet cada conjunto de resultados, se coloca en una tabla independiente.When multiple result sets are added to the DataSet each result set is placed in a separate table. Los conjuntos de resultados adicionales se denominan anexando valores enteros al nombre de tabla especificado (por ejemplo, "Table", "Table1", "Tabla2", etc.).Additional result sets are named by appending integral values to the specified table name (for example, "Table", "Table1", "Table2", and so on.). Las aplicaciones que usan nombres de tabla y columna deben garantizar que no se produzcan conflictos con estos patrones de nomenclatura.Applications using column and table names should ensure that conflicts with these naming patterns does not occur.

FillSchema no devuelve ninguna fila.FillSchema does not return any rows. Utilice el Fill método para agregar filas a un DataTable .Use the Fill method to add rows to a DataTable.

Nota

Al controlar instrucciones SQL por lotes que devuelven varios resultados, la implementación de FillSchema para el proveedor de datos de .NET Framework para OLE DB recupera información de esquema solo para el primer resultado.When handling batch SQL statements that return multiple results, the implementation of FillSchema for the .NET Framework Data Provider for OLE DB retrieves schema information for only the first result. Para recuperar información de esquema para varios resultados, use Fill con el MissingSchemaAction establecido en AddWithKey .To retrieve schema information for multiple results, use Fill with the MissingSchemaAction set to AddWithKey.

Cuando se utiliza el método FillSchema, el proveedor de datos de .NET Framework para SQL Server agrega una cláusula FOR BROWSE a la instrucción que se está ejecutando.When using FillSchema, the .NET Framework Data Provider for SQL Server appends a FOR BROWSE clause to the statement being executed. El usuario debe tener en cuenta los posibles efectos secundarios, como las interferencias con el uso de las instrucciones SET FMTONLY ON.The user should be aware of potential side effects, such as interference with the use of SET FMTONLY ON statements. Para obtener más información, vea SET FMTONLY (Transact-SQL).For more information, see SET FMTONLY (Transact-SQL).

Se aplica a

FillSchema(DataSet, SchemaType)

Agrega una DataTable denominada "Table" para el DataSet especificado y configura el esquema para que coincida con el origen de datos basado en el SchemaType especificado.Adds a DataTable named "Table" to the specified DataSet and configures the schema to match that in the data source based on the specified 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()

Parámetros

dataSet
DataSet

DataSet en el que se va a insertar el esquema.A DataSet to insert the schema in.

schemaType
SchemaType

Uno de los valores SchemaType que especifica cómo insertar el esquema.One of the SchemaType values that specify how to insert the schema.

Devoluciones

DataTable[]

Referencia a una colección de objetos DataTable que se agregaron al DataSet.A reference to a collection of DataTable objects that were added to the DataSet.

Implementaciones

Ejemplos

En el ejemplo siguiente se usa la clase derivada, SqlDataAdapter , para rellenar DataSet con el esquema y devuelve un DataSet .The following example uses the derived class, SqlDataAdapter, to fill a DataSet with the schema, and returns a 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

Comentarios

Este método recupera la información de esquema del origen de datos mediante SelectCommand .This method retrieves the schema information from the data source using the SelectCommand.

Una FillSchema operación agrega un DataTable al destino DataSet .A FillSchema operation adds a DataTable to the destination DataSet. A continuación, agrega columnas a la DataColumnCollection de y DataTable configura las siguientes DataColumn propiedades si existen en el origen de datos:It then adds columns to the DataColumnCollection of the DataTable, and configures the following DataColumn properties if they exist at the data source:

FillSchema también configura las PrimaryKey Constraints propiedades y según las siguientes reglas:FillSchema also configures the PrimaryKey and Constraints properties according to the following rules:

  • Si devuelve una o más columnas de clave principal SelectCommand , se usan como columnas de clave principal para DataTable .If one or more primary key columns are returned by the SelectCommand, they are used as the primary key columns for the DataTable.

  • Si no se devuelven columnas de clave principal pero las columnas únicas son, las columnas únicas se usan como clave principal si, y solo si, todas las columnas únicas no aceptan valores NULL.If no primary key columns are returned but unique columns are, the unique columns are used as the primary key if, and only if, all the unique columns are nonnullable. Si alguna de las columnas admite valores NULL, UniqueConstraint se agrega a ConstraintCollection , pero PrimaryKey no se establece la propiedad.If any of the columns are nullable, a UniqueConstraint is added to the ConstraintCollection, but the PrimaryKey property is not set.

  • Si se devuelven las columnas de clave principal y las columnas únicas, las columnas de clave principal se usan como columnas de clave principal para DataTable .If both primary key columns and unique columns are returned, the primary key columns are used as the primary key columns for the DataTable.

Tenga en cuenta que las claves principales y las restricciones únicas se agregan a ConstraintCollection según las reglas anteriores, pero no se agregan otros tipos de restricción.Note that primary keys and unique constraints are added to the ConstraintCollection according to the preceding rules, but other constraint types are not added.

Si se define un índice clúster único en una o varias columnas de una tabla de SQL Server y la restricción Primary Key se define en un conjunto independiente de columnas, se devolverán los nombres de las columnas del índice clúster.If a unique clustered index is defined on a column or columns in a SQL Server table and the primary key constraint is defined on a separate set of columns, then the names of the columns in the clustered index will be returned. Para devolver el nombre o los nombres de las columnas de clave principal, use una sugerencia de consulta con la instrucción SELECT que especifica el nombre del índice de clave principal.To return the name or names of the primary key columns, use a query hint with the SELECT statement that specifies the name of the primary key index. Para obtener más información sobre cómo especificar sugerencias de consulta, vea hints (Transact-SQL)-Query.For more information about specifying query hints, see Hints (Transact-SQL) - Query.

La información de clave principal se utiliza durante Fill para buscar y reemplazar las filas cuyas columnas de clave coinciden.Primary key information is used during Fill to find and replace any rows whose key columns match. Si este no es el comportamiento deseado, use Fill sin solicitar información de esquema.If this is not the desired behavior, use Fill without requesting schema information.

Si IDataAdapter encuentra columnas duplicadas al rellenar una DataTable , genera nombres para las columnas siguientes, con el patrón "columnName 1", "columnName 2", "columnName 3", etc.If the IDataAdapter encounters duplicate columns while populating a DataTable, it generates names for the subsequent columns, using the pattern "columnname 1", "columnname 2", "columnname 3", and so on. Si los datos entrantes contienen columnas sin nombre, se colocan en DataSet según el patrón "Column1", "columna2", etc.If the incoming data contains unnamed columns, they are placed in the DataSet according to the pattern "Column1", "Column2", and so on. Cuando se agregan varios conjuntos de resultados a DataSet cada conjunto de resultados, se coloca en una tabla independiente.When multiple result sets are added to the DataSet each result set is placed in a separate table. Los conjuntos de resultados adicionales se denominan anexando valores enteros al nombre de tabla especificado (por ejemplo, "Table", "Table1", "Tabla2", etc.).Additional result sets are named by appending integral values to the specified table name (for example, "Table", "Table1", "Table2", and so on.). Las aplicaciones que usan nombres de tabla y columna deben garantizar que no se produzcan conflictos con estos patrones de nomenclatura.Applications using column and table names should ensure that conflicts with these naming patterns does not occur.

El IDbConnection objeto asociado al comando SELECT debe ser válido, pero no es necesario abrirlo.The IDbConnection object associated with the select command must be valid, but it does not need to open. Si el IDbConnection está cerrado antes de FillSchema llamar a, se abre para recuperar los datos y, a continuación, se cierra.If the IDbConnection is closed before FillSchema is called, it is opened to retrieve data, then closed. Si la conexión está abierta antes FillSchema de que se llame a, se deja abierta.If the connection is open before FillSchema is called, it is left open.

Nota

Al controlar instrucciones SQL por lotes que devuelven varios resultados, la implementación de FillSchema para el proveedor de datos de .NET Framework para OLE DB recupera información de esquema solo para el primer resultado.When handling batch SQL statements that return multiple results, the implementation of FillSchema for the .NET Framework Data Provider for OLE DB retrieves schema information for only the first result. Para recuperar información de esquema para varios resultados, use Fill con el MissingSchemaAction establecido en AddWithKey .To retrieve schema information for multiple results, use Fill with the MissingSchemaAction set to AddWithKey.

Cuando se utiliza el método FillSchema, el proveedor de datos de .NET Framework para SQL Server agrega una cláusula FOR BROWSE a la instrucción que se está ejecutando.When using FillSchema, the .NET Framework Data Provider for SQL Server appends a FOR BROWSE clause to the statement being executed. El usuario debe tener en cuenta los posibles efectos secundarios, como las interferencias con el uso de las instrucciones SET FMTONLY ON.The user should be aware of potential side effects, such as interference with the use of SET FMTONLY ON statements. Para obtener más información, vea SET FMTONLY (Transact-SQL).For more information, see SET FMTONLY (Transact-SQL).

Se aplica a