DbDataAdapter.FillSchema Méthode

Définition

Ajoute DataTable à DataSet et configure le schéma pour qu'il corresponde à celui de la source de données.

Surcharges

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

Ajoute un DataTable au DataSet spécifié et configure le schéma pour qu'il corresponde à celui de la source de données en se basant sur le SchemaType défini.

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Configure le schéma du DataTable spécifié en fonction du SchemaType, de la chaîne de commande et des valeurs CommandBehavior définis.

FillSchema(DataSet, SchemaType, String)

Ajoute un DataTable au DataSet spécifié et configure le schéma pour qu'il corresponde à celui de la source de données en se basant sur les SchemaType et DataTable définis.

FillSchema(DataTable, SchemaType)

Configure le schéma du DataTable spécifié en fonction du SchemaType défini.

FillSchema(DataSet, SchemaType)

Ajoute un DataTable appelé "Table" au DataSet spécifié et configure le schéma pour qu'il corresponde à celui de la source de données en se basant sur le SchemaType spécifié.

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

Ajoute un DataTable au DataSet spécifié et configure le schéma pour qu'il corresponde à celui de la source de données en se basant sur le SchemaType défini.

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()

Paramètres

dataSet
DataSet

DataSet à remplir avec le schéma à partir de la source de données.

schemaType
SchemaType

Une des valeurs de l'objet SchemaType.

command
IDbCommand

Instruction SQL SELECT utilisée pour récupérer des lignes de la source de données.

srcTable
String

Le nom de la table source à utiliser pour le mappage de table.

behavior
CommandBehavior

Une des valeurs de l'objet CommandBehavior.

Retours

DataTable[]

Tableau d'objets DataTable qui contient les informations de schéma retournées par la source de données.

Remarques

La FillSchema méthode récupère le schéma à partir de la source de données à l’aide du SelectCommand. L’objet de connexion associé à celui-ci SelectCommand doit être valide, mais il n’a pas besoin d’être ouvert. Si la connexion est fermée avant FillSchema d’être appelée, elle est ouverte pour récupérer des données, puis fermée. Si la connexion est ouverte avant FillSchema d’être appelée, elle reste ouverte.

Une FillSchema opération ajoute un DataTable à la destination DataSet. Il ajoute ensuite des colonnes à la DataColumnCollection source DataTablede données et configure les propriétés suivantes DataColumn s’ils existent dans la source de données :

FillSchemaconfigure également les propriétés et Constraints les PrimaryKey propriétés en fonction des règles suivantes :

  • Si une ou plusieurs colonnes de clé primaire sont retournées par le SelectCommand, elles sont utilisées comme colonnes de clé primaire pour le DataTable.

  • Si aucune colonne de clé primaire n’est retournée, mais que les colonnes uniques sont, elles sont utilisées comme clé primaire si, et seulement si, toutes les colonnes uniques ne sont pas inullables. Si l’une des colonnes est nullable, une UniqueConstraint valeur est ajoutée à la ConstraintCollectionpropriété , mais la PrimaryKey propriété n’est pas définie.

  • Si les colonnes clés primaires et les colonnes uniques sont retournées, les colonnes de clé primaire sont utilisées comme colonnes de clé primaire pour le DataTable.

Notez que les clés primaires et les contraintes uniques sont ajoutées aux ConstraintCollection règles précédentes, mais d’autres types de contraintes ne sont pas ajoutés.

Si un index cluster unique est défini sur une colonne ou des colonnes d’une table SQL Server et que la contrainte de clé primaire est définie sur un ensemble distinct de colonnes, les noms des colonnes de l’index cluster sont retournés. Pour renvoyer le nom ou les noms des colonnes de clé primaire, utilisez un indicateur de requête avec l’instruction SELECT qui spécifie le nom de l’index de clé primaire. Pour plus d’informations sur la spécification d’indicateurs de requête, consultez Indicateurs (Transact-SQL) - Requête.

Si les IDataAdapter colonnes en double sont rencontrées lors du remplissage d’un DataTable, elle génère des noms pour les colonnes suivantes, en utilisant le modèle « columnname1 », « columnname2 », « columnname3 », et ainsi de suite. Si les données entrantes contiennent des colonnes sans nom, elles sont placées dans le DataSet modèle « Column1 », « Column2 », et ainsi de suite. Lorsque plusieurs jeux de résultats sont ajoutés à chaque DataSet jeu de résultats est placé dans une table distincte. Des jeux de résultats supplémentaires sont nommés en ajoutant des valeurs intégrales au nom de table spécifié (par exemple, « Table », « Table1 », « Table2 », etc.). Si votre application utilise des noms de colonnes et de tables, assurez-vous qu’il n’existe aucun conflit avec ces modèles d’affectation de noms.

La FillSchema méthode prend en charge les scénarios où le fichier contient plusieurs DataTable objets dont les DataSet noms diffèrent uniquement par cas. Dans de telles situations, FillSchema effectue une comparaison sensible à la casse pour rechercher la table correspondante et crée une table si aucune correspondance exacte n’existe. Le code C# suivant illustre ce comportement.

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

S’il FillSchema est appelé et qu’il ne contient qu’un DataTable seul nom dont le DataSet nom diffère uniquement par cas, il DataTable est mis à jour. Dans ce scénario, la comparaison ne respecte pas la casse. Le code C# suivant illustre ce comportement.

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 ne retourne aucune ligne. Utilisez la Fill méthode pour ajouter des lignes à un DataTable.

Notes

Lors de la gestion des instructions batch SQL qui retournent plusieurs résultats, l’implémentation de l'.NET Framework Fournisseur de données pour OLE DB récupère les informations de FillSchema schéma uniquement pour le premier résultat. Pour récupérer des informations de schéma pour plusieurs résultats, utilisez Fill la MissingSchemaAction valeur AddWithKeydéfinie sur .

Si vous utilisez FillSchema, le fournisseur de données .NET Framework pour SQL Server ajoute une clause FOR BROWSE à l'instruction en cours d'exécution. L'utilisateur doit connaître les effets secondaires potentiels, tels que les interférences avec l'utilisation d'instructions SET FMTONLY ON. Pour plus d’informations, consultez SET FMTONLY (Transact-SQL).

Notes pour les héritiers

Cette implémentation de la FillSchema(DataSet, SchemaType) méthode est protégée et conçue pour une utilisation par un fournisseur de données .NET Framework.

Voir aussi

S’applique à

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Configure le schéma du DataTable spécifié en fonction du SchemaType, de la chaîne de commande et des valeurs CommandBehavior définis.

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

Paramètres

dataTable
DataTable

DataTable à remplir avec le schéma à partir de la source de données.

schemaType
SchemaType

Une des valeurs de l'objet SchemaType.

command
IDbCommand

Instruction SQL SELECT utilisée pour récupérer des lignes de la source de données.

behavior
CommandBehavior

Une des valeurs de l'objet CommandBehavior.

Retours

DataTable

Objet DataTable qui contient les informations de schéma retournées par la source de données.

Remarques

La FillSchema méthode récupère le schéma à partir de la source de données à l’aide du SelectCommand. L’objet de connexion associé à celui-ci SelectCommand doit être valide, mais il n’a pas besoin d’être ouvert. Si la connexion est fermée avant FillSchema d’être appelée, elle est ouverte pour récupérer des données, puis fermée. Si la connexion est ouverte avant FillSchema d’être appelée, elle reste ouverte.

Une FillSchema opération ajoute un DataTable à la destination DataSet. Il ajoute ensuite des colonnes à la DataColumnCollection source DataTablede données et configure les propriétés suivantes DataColumn s’ils existent dans la source de données :

FillSchemaconfigure également les propriétés et Constraints les PrimaryKey propriétés en fonction des règles suivantes :

  • Si une ou plusieurs colonnes de clé primaire sont retournées par le SelectCommand, elles sont utilisées comme colonnes de clé primaire pour le DataTable.

  • Si aucune colonne de clé primaire n’est retournée, mais que les colonnes uniques sont, elles sont utilisées comme clé primaire si, et seulement si, toutes les colonnes uniques ne sont pas inullables. Si l’une des colonnes est nullable, une UniqueConstraint valeur est ajoutée à la ConstraintCollectionpropriété , mais la PrimaryKey propriété n’est pas définie.

  • Si les colonnes clés primaires et les colonnes uniques sont retournées, les colonnes de clé primaire sont utilisées comme colonnes de clé primaire pour le DataTable.

Notez que les clés primaires et les contraintes uniques sont ajoutées aux ConstraintCollection règles précédentes, mais d’autres types de contraintes ne sont pas ajoutés.

Si un index cluster unique est défini sur une colonne ou des colonnes d’une table SQL Server et que la contrainte de clé primaire est définie sur un ensemble distinct de colonnes, les noms des colonnes de l’index cluster sont retournés. Pour renvoyer le nom ou les noms des colonnes de clé primaire, utilisez un indicateur de requête avec l’instruction SELECT qui spécifie le nom de l’index de clé primaire. Pour plus d’informations sur la spécification d’indicateurs de requête, consultez Indicateurs (Transact-SQL) - Requête.

Si les IDataAdapter colonnes en double sont rencontrées lors du remplissage d’un DataTable, elle génère des noms pour les colonnes suivantes, en utilisant le modèle « columnname1 », « columnname2 », « columnname3 », et ainsi de suite. Si les données entrantes contiennent des colonnes sans nom, elles sont placées dans le DataSet modèle « Column1 », « Column2 », et ainsi de suite. Lorsque plusieurs jeux de résultats sont ajoutés à chaque DataSet jeu de résultats est placé dans une table distincte. Des jeux de résultats supplémentaires sont nommés en ajoutant des valeurs intégrales au nom de table spécifié (par exemple, « Table », « Table1 », « Table2 », etc.). Si votre application utilise des noms de colonnes et de tables, assurez-vous qu’il n’existe aucun conflit avec ces modèles d’affectation de noms.

FillSchema ne retourne aucune ligne. Utilisez la Fill méthode pour ajouter des lignes à un DataTable.

Notes

Lors de la gestion des instructions batch SQL qui retournent plusieurs résultats, l’implémentation de l'.NET Framework Fournisseur de données pour OLE DB récupère les informations de FillSchema schéma uniquement pour le premier résultat. Pour récupérer des informations de schéma pour plusieurs résultats, utilisez Fill la MissingSchemaAction valeur AddWithKeydéfinie sur .

Si vous utilisez FillSchema, le fournisseur de données .NET Framework pour SQL Server ajoute une clause FOR BROWSE à l'instruction en cours d'exécution. L'utilisateur doit connaître les effets secondaires potentiels, tels que les interférences avec l'utilisation d'instructions SET FMTONLY ON. Pour plus d’informations, consultez SET FMTONLY (Transact-SQL).

Notes pour les héritiers

Cette implémentation de la FillSchema(DataSet, SchemaType) méthode est protégée et conçue pour une utilisation par un fournisseur de données .NET Framework.

Voir aussi

S’applique à

FillSchema(DataSet, SchemaType, String)

Ajoute un DataTable au DataSet spécifié et configure le schéma pour qu'il corresponde à celui de la source de données en se basant sur les SchemaType et DataTable définis.

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()

Paramètres

dataSet
DataSet

DataSet dans lequel insérer le schéma.

schemaType
SchemaType

Une des valeurs SchemaType qui spécifient comment insérer le schéma.

srcTable
String

Le nom de la table source à utiliser pour le mappage de table.

Retours

DataTable[]

Référence à une collection d’objets DataTable qui ont été ajoutés à DataSet.

Exceptions

Impossible de trouver une table source auprès de laquelle obtenir le schéma.

Exemples

L’exemple suivant utilise la classe dérivée, SqlDataAdapterpour remplir un DataSet schéma et retourne un 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

Remarques

Cette méthode récupère les informations de schéma de la source de données à l’aide du SelectCommand.

Une FillSchema opération ajoute un DataTable à la destination DataSet. Il ajoute ensuite des colonnes à la DataColumnCollection source DataTablede données et configure les propriétés suivantes DataColumn s’ils existent dans la source de données :

FillSchemaconfigure également les propriétés et Constraints les PrimaryKey propriétés en fonction des règles suivantes :

  • Si une ou plusieurs colonnes de clé primaire sont retournées par le SelectCommand, elles sont utilisées comme colonnes de clé primaire pour le DataTable.

  • Si aucune colonne de clé primaire n’est retournée, mais que les colonnes uniques sont, elles sont utilisées comme clé primaire si, et seulement si, toutes les colonnes uniques ne sont pas inullables. Si l’une des colonnes est nullable, une UniqueConstraint valeur est ajoutée à la ConstraintCollectionpropriété , mais la PrimaryKey propriété n’est pas définie.

  • Si les colonnes clés primaires et les colonnes uniques sont retournées, les colonnes de clé primaire sont utilisées comme colonnes de clé primaire pour le DataTable.

Notez que les clés primaires et les contraintes uniques sont ajoutées aux ConstraintCollection règles précédentes, mais d’autres types de contraintes ne sont pas ajoutés.

Si un index cluster unique est défini sur une colonne ou des colonnes d’une table SQL Server et que la contrainte de clé primaire est définie sur un ensemble distinct de colonnes, les noms des colonnes de l’index cluster sont retournés. Pour renvoyer le nom ou les noms des colonnes de clé primaire, utilisez un indicateur de requête avec l’instruction SELECT qui spécifie le nom de l’index de clé primaire. Pour plus d’informations sur la spécification d’indicateurs de requête, consultez Indicateurs (Transact-SQL) - Requête.

Les informations de clé primaire sont utilisées pendant Fill la recherche et le remplacement des lignes dont les colonnes clés correspondent. Si ce n’est pas le comportement souhaité, utilisez Fill sans demander d’informations de schéma.

Si les DbDataAdapter colonnes en double sont rencontrées lors du remplissage d’un DataTable, elle génère des noms pour les colonnes suivantes, en utilisant le modèle « columnname1 », « columnname2 », « columnname3 », et ainsi de suite. Si les données entrantes contiennent des colonnes sans nom, elles sont placées dans le DataSet modèle « Column1 », « Column2 », et ainsi de suite. Lorsque plusieurs jeux de résultats sont ajoutés à chaque DataSet jeu de résultats est placé dans une table distincte. Des jeux de résultats supplémentaires sont nommés en ajoutant des valeurs intégrales au nom de table spécifié (par exemple, « Table », « Table1 », « Table2 », etc.). Si votre application utilise des noms de colonnes et de tables, assurez-vous qu’il n’existe aucun conflit avec ces modèles d’affectation de noms.

La FillSchema méthode prend en charge les scénarios où le fichier contient plusieurs DataTable objets dont les DataSet noms diffèrent uniquement par cas. Dans de telles situations, FillSchema effectue une comparaison sensible à la casse pour rechercher la table correspondante et crée une table si aucune correspondance exacte n’existe. Le code C# suivant illustre ce comportement.

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

S’il FillSchema est appelé et qu’il ne contient qu’un DataTable seul nom dont le DataSet nom diffère uniquement par cas, il DataTable est mis à jour. Dans ce scénario, la comparaison ne respecte pas la casse. Le code C# suivant illustre ce comportement.

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.  

L’objet IDbConnection associé à la commande select doit être valide, mais il n’a pas besoin d’ouvrir. Si la IDbConnection valeur est fermée avant FillSchema d’être appelée, elle est ouverte pour récupérer des données, puis fermée. Si la connexion est ouverte avant FillSchema d’être appelée, elle est laissée ouverte.

Notes

Lors de la gestion des instructions batch SQL qui retournent plusieurs résultats, l’implémentation de l'.NET Framework Fournisseur de données pour OLE DB récupère les informations de FillSchema schéma uniquement pour le premier résultat. Pour récupérer des informations de schéma pour plusieurs résultats, utilisez Fill la MissingSchemaAction valeur AddWithKeydéfinie sur .

Si vous utilisez FillSchema, le fournisseur de données .NET Framework pour SQL Server ajoute une clause FOR BROWSE à l'instruction en cours d'exécution. L'utilisateur doit connaître les effets secondaires potentiels, tels que les interférences avec l'utilisation d'instructions SET FMTONLY ON. Pour plus d’informations, consultez SET FMTONLY (Transact-SQL).

Voir aussi

S’applique à

FillSchema(DataTable, SchemaType)

Configure le schéma du DataTable spécifié en fonction du SchemaType défini.

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

Paramètres

dataTable
DataTable

DataTable à remplir avec le schéma à partir de la source de données.

schemaType
SchemaType

Une des valeurs de l'objet SchemaType.

Retours

DataTable

DataTable qui contient les informations de schéma retournées par la source de données.

Exemples

L’exemple suivant utilise la classe dérivée, SqlDataAdapterpour remplir un DataSet schéma et retourne un 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

Remarques

La FillSchema méthode récupère le schéma à partir de la source de données à l’aide du SelectCommand. L’objet de connexion associé à celui-ci SelectCommand doit être valide, mais il n’a pas besoin d’être ouvert. Si la connexion est fermée avant FillSchema d’être appelée, elle est ouverte pour récupérer des données, puis fermée. Si la connexion est ouverte avant FillSchema d’être appelée, elle reste ouverte.

Une FillSchema opération retourne un DataTable. Elle ajoute ensuite des colonnes à l’élément DataColumnCollection DataTable, et configure les propriétés suivantes DataColumn s’ils existent à la source de données :

FillSchemaconfigure également les propriétés et Constraints les PrimaryKey propriétés en fonction des règles suivantes :

  • Si un PrimaryKey a déjà été défini pour le DataTableou les DataTable données contient, la PrimaryKey propriété ne sera pas définie.

  • Si une ou plusieurs colonnes de clé primaire sont retournées par le SelectCommand, elles sont utilisées comme colonnes de clé primaire pour le DataTable.

  • Si aucune colonne de clé primaire n’est retournée, mais que les colonnes uniques sont, elles sont utilisées comme clé primaire si, et seulement si, toutes les colonnes uniques ne sont pas inullables. Si l’une des colonnes est nullable, une UniqueConstraint valeur est ajoutée à la ConstraintCollectionpropriété , mais la PrimaryKey propriété n’est pas définie.

  • Si les colonnes clés primaires et les colonnes uniques sont retournées, les colonnes de clé primaire sont utilisées comme colonnes de clé primaire pour le DataTable.

Notez que les clés primaires et les contraintes uniques sont ajoutées aux ConstraintCollection règles précédentes, mais d’autres types de contraintes ne sont pas ajoutés. Ce processus peut nécessiter plusieurs allers-retours vers le serveur.

Si un index cluster unique est défini sur une colonne ou des colonnes d’une table SQL Server et que la contrainte de clé primaire est définie sur un ensemble distinct de colonnes, les noms des colonnes de l’index cluster sont retournés. Pour renvoyer le nom ou les noms des colonnes de clé primaire, utilisez un indicateur de requête avec l’instruction SELECT qui spécifie le nom de l’index de clé primaire. Pour plus d’informations sur la spécification d’indicateurs de requête, consultez Indicateurs (Transact-SQL) - Requête.

Si les DbDataAdapter colonnes en double sont rencontrées lors du remplissage d’un DataTable, elle génère des noms pour les colonnes suivantes, en utilisant le modèle « columnname1 », « columnname2 », « columnname3 », et ainsi de suite. Si les données entrantes contiennent des colonnes sans nom, elles sont placées dans le DataSet modèle « Column1 », « Column2 », et ainsi de suite. Lorsque plusieurs jeux de résultats sont ajoutés à chaque DataSet jeu de résultats est placé dans une table distincte. Des jeux de résultats supplémentaires sont nommés en ajoutant des valeurs intégrales au nom de table spécifié (par exemple, « Table », « Table1 », « Table2 », etc.). Si votre application utilise des noms de colonnes et de tables, assurez-vous qu’il n’existe aucun conflit avec ces modèles d’affectation de noms.

FillSchema ne retourne aucune ligne. Utilisez la Fill méthode pour ajouter des lignes à un DataTable.

Notes

Lors de la gestion des instructions batch SQL qui retournent plusieurs résultats, l’implémentation de l'.NET Framework Fournisseur de données pour OLE DB récupère les informations de FillSchema schéma uniquement pour le premier résultat. Pour récupérer des informations de schéma pour plusieurs résultats, utilisez Fill la MissingSchemaAction valeur AddWithKeydéfinie sur .

Si vous utilisez FillSchema, le fournisseur de données .NET Framework pour SQL Server ajoute une clause FOR BROWSE à l'instruction en cours d'exécution. L'utilisateur doit connaître les effets secondaires potentiels, tels que les interférences avec l'utilisation d'instructions SET FMTONLY ON. Pour plus d’informations, consultez SET FMTONLY (Transact-SQL).

Voir aussi

S’applique à

FillSchema(DataSet, SchemaType)

Ajoute un DataTable appelé "Table" au DataSet spécifié et configure le schéma pour qu'il corresponde à celui de la source de données en se basant sur le SchemaType spécifié.

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()

Paramètres

dataSet
DataSet

DataSet dans lequel insérer le schéma.

schemaType
SchemaType

Une des valeurs de SchemaType qui spécifient comment insérer le schéma.

Retours

DataTable[]

Référence à une collection d’objets DataTable qui ont été ajoutés à DataSet.

Implémente

Exemples

L’exemple suivant utilise la classe dérivée, SqlDataAdapterpour remplir un DataSet schéma et retourner un 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

Remarques

Cette méthode récupère les informations de schéma à partir de la source de données à l’aide du SelectCommand.

Une FillSchema opération ajoute une DataTable à la destination DataSet. Elle ajoute ensuite des colonnes à l’élément DataColumnCollection DataTable, et configure les propriétés suivantes DataColumn s’ils existent à la source de données :

FillSchemaconfigure également les propriétés et Constraints les PrimaryKey propriétés en fonction des règles suivantes :

  • Si une ou plusieurs colonnes de clé primaire sont retournées par le SelectCommand, elles sont utilisées comme colonnes de clé primaire pour le DataTable.

  • Si aucune colonne de clé primaire n’est retournée, mais que les colonnes uniques sont utilisées comme clé primaire si, et seulement si, toutes les colonnes uniques ne sont pas inullables. Si l’une des colonnes est nullable, une UniqueConstraint valeur est ajoutée à celle-ci ConstraintCollection, mais la PrimaryKey propriété n’est pas définie.

  • Si les colonnes clés primaires et les colonnes uniques sont retournées, les colonnes de clé primaire sont utilisées comme colonnes de clé primaire pour le DataTable.

Notez que les clés primaires et les contraintes uniques sont ajoutées aux ConstraintCollection règles précédentes, mais d’autres types de contraintes ne sont pas ajoutés.

Si un index cluster unique est défini sur une colonne ou des colonnes d’une table SQL Server et que la contrainte de clé primaire est définie sur un ensemble distinct de colonnes, les noms des colonnes dans l’index cluster sont retournés. Pour renvoyer le nom ou les noms des colonnes de clé primaire, utilisez un indicateur de requête avec l’instruction SELECT qui spécifie le nom de l’index de clé primaire. Pour plus d’informations sur la spécification des indicateurs de requête, consultez Indicateurs (Transact-SQL) - Requête.

Les informations de clé primaire sont utilisées pendant Fill la recherche et le remplacement de toutes les lignes dont les colonnes clés correspondent. Si ce n’est pas le comportement souhaité, utilisez Fill sans demander d’informations de schéma.

Si les colonnes dupliquées lors de la IDataAdapter remplissage d’un DataTable, elle génère des noms pour les colonnes suivantes, à l’aide du modèle « columnname1 », « columnname2 », « columnname3 », et ainsi de suite. Si les données entrantes contiennent des colonnes non nommées, elles sont placées dans le DataSet modèle « Column1 », « Column2 », et ainsi de suite. Lorsque plusieurs jeux de résultats sont ajoutés à chaque DataSet jeu de résultats est placé dans une table distincte. Des jeux de résultats supplémentaires sont nommés en ajoutant des valeurs intégrales au nom de table spécifié (par exemple, « Table », « Table1 », « Table2 », etc.). Si votre application utilise des noms de colonnes et de tables, vérifiez qu’il n’existe aucun conflit avec ces modèles d’affectation de noms.

L’objet IDbConnection associé à la commande select doit être valide, mais il n’est pas nécessaire d’ouvrir. Si le IDbConnection fichier est fermé avant FillSchema d’être appelé, il est ouvert pour récupérer des données, puis fermé. Si la connexion est ouverte avant FillSchema d’être appelée, elle est ouverte.

Notes

Lors de la gestion des instructions batch SQL qui retournent plusieurs résultats, l’implémentation de l'.NET Framework Fournisseur de données pour OLE DB récupère les informations de FillSchema schéma pour uniquement le premier résultat. Pour récupérer des informations de schéma pour plusieurs résultats, utilisez Fill la MissingSchemaAction valeur définie sur AddWithKey.

Si vous utilisez FillSchema, le fournisseur de données .NET Framework pour SQL Server ajoute une clause FOR BROWSE à l'instruction en cours d'exécution. L'utilisateur doit connaître les effets secondaires potentiels, tels que les interférences avec l'utilisation d'instructions SET FMTONLY ON. Pour plus d’informations, consultez SET FMTONLY (Transact-SQL).

Voir aussi

S’applique à