Condividi tramite


DbDataAdapter.FillSchema Metodo

Definizione

Aggiunge un oggetto DataTable a e DataSet configura lo schema in modo che corrisponda a quello nell'origine dati.

Overload

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

Aggiunge un DataTable oggetto all'oggetto specificato DataSet e configura lo schema in modo che corrisponda a quello nell'origine dati in base all'oggetto specificato SchemaType.

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Configura lo schema dell'oggetto specificato in base alla stringa di comando e CommandBehavior ai valori specificati.DataTableSchemaType

FillSchema(DataSet, SchemaType, String)

Aggiunge un DataTable oggetto all'oggetto specificato DataSet e configura lo schema in modo che corrisponda a quello nell'origine dati in base all'oggetto specificato SchemaType e DataTable.

FillSchema(DataTable, SchemaType)

Configura lo schema dell'oggetto specificato DataTable in base all'oggetto specificato SchemaType.

FillSchema(DataSet, SchemaType)

Aggiunge un DataTable oggetto denominato "Table" all'oggetto specificato DataSet e configura lo schema in modo che corrisponda a quello nell'origine dati in base all'oggetto specificato SchemaType.

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

Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs

Aggiunge un DataTable oggetto all'oggetto specificato DataSet e configura lo schema in modo che corrisponda a quello nell'origine dati in base all'oggetto specificato 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")]
protected virtual System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, System.Data.IDbCommand command, 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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * System.Data.IDbCommand * string * System.Data.CommandBehavior -> System.Data.DataTable[]
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()

Parametri

dataSet
DataSet

Oggetto DataSet da riempire con lo schema dall'origine dati.

schemaType
SchemaType

Uno dei SchemaType valori.

command
IDbCommand

Istruzione SQL SELECT usata per recuperare righe dall'origine dati.

srcTable
String

Nome della tabella di origine da utilizzare per il mapping delle tabelle.

behavior
CommandBehavior

Uno dei CommandBehavior valori.

Restituisce

Matrice di DataTable oggetti che contengono informazioni sullo schema restituite dall'origine dati.

Attributi

Commenti

Il FillSchema metodo recupera lo schema dall'origine dati utilizzando .SelectCommand L'oggetto connessione associato a SelectCommand deve essere valido, ma non deve essere aperto. Se la connessione viene chiusa prima FillSchema della chiamata, viene aperta per recuperare i dati, quindi chiusa. Se la connessione è aperta prima FillSchema della chiamata, rimane aperta.

Un'operazione FillSchema aggiunge un oggetto DataTable alla destinazione DataSet. Aggiunge quindi le colonne a DataColumnCollection di DataTablee configura le proprietà seguenti DataColumn , se presenti nell'origine dati:

FillSchema configura anche le PrimaryKey proprietà e Constraints in base alle regole seguenti:

  • Se una o più colonne chiave primaria vengono restituite da SelectCommand, vengono usate come colonne chiave primaria per .DataTable

  • Se non vengono restituite colonne chiave primaria ma colonne univoche, le colonne univoche vengono usate come chiave primaria se e solo se tutte le colonne univoche non sono nullable. Se una delle colonne è nullable, viene aggiunto un oggetto UniqueConstraint a ConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite entrambe le colonne chiave primaria e le colonne univoche, le colonne chiave primaria vengono usate come colonne chiave primaria per .DataTable

Si noti che le chiavi primarie e i vincoli univoci vengono aggiunti a in base alle ConstraintCollection regole precedenti, ma altri tipi di vincolo non vengono aggiunti.

Se un indice cluster univoco viene definito in una colonna o in colonne di una tabella di SQL Server e il vincolo di chiave primaria viene definito in un set separato di colonne, verranno restituiti i nomi delle colonne nell'indice cluster. Per restituire il nome o i nomi delle colonne chiave primaria, usare un hint per la query con l'istruzione SELECT che specifica il nome dell'indice di chiave primaria. Per altre informazioni sulla specifica degli hint per la query, vedere Hint (Transact-SQL) - Query.

Se rileva colonne duplicate durante il IDataAdapter popolamento di , DataTablegenera nomi per le colonne successive, usando il modello "columnname1", "columnname2", "columnname3" e così via. Se i dati in ingresso contengono colonne senza nome, vengono posizionate nell'oggetto DataSet in base al modello "Column1", "Column2" e così via. Quando vengono aggiunti più set di risultati a DataSet ogni set di risultati viene inserito in una tabella separata. I set di risultati aggiuntivi vengono denominati aggiungendo valori integrali al nome della tabella specificato, ad esempio "Table", "Table1", "Table2" e così via. Se l'app usa nomi di colonna e tabella, assicurarsi che non ci siano conflitti con questi modelli di denominazione.

Il FillSchema metodo supporta scenari in cui DataSet contiene più DataTable oggetti i cui nomi differiscono solo per caso. In tali situazioni, FillSchema esegue un confronto con distinzione tra maiuscole e minuscole per trovare la tabella corrispondente e crea una nuova tabella se non esiste alcuna corrispondenza esatta. Il codice C# seguente illustra questo comportamento.

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

Se FillSchema viene chiamato e l'oggetto DataSet contiene solo un DataTable nome il cui nome differisce solo per caso, viene DataTable aggiornato. In questo scenario, il confronto non fa distinzione tra maiuscole e minuscole. Il codice C# seguente illustra questo comportamento.

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 non restituisce righe. Utilizzare il Fill metodo per aggiungere righe a un oggetto DataTable.

Annotazioni

Quando si gestiscono istruzioni SQL batch che restituiscono più risultati, l'implementazione di per il provider di FillSchema dati .NET Framework per OLE DB recupera le informazioni sullo schema solo per il primo risultato. Per recuperare informazioni sullo schema per più risultati, usare Fill con il MissingSchemaAction set su AddWithKey.

Quando si usa FillSchema, il provider di dati .NET Framework per SQL Server aggiunge una clausola FOR BROWSE all'istruzione in esecuzione. L'utente deve essere a conoscenza di potenziali effetti collaterali, ad esempio l'interferenza con l'uso di istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Note per gli eredi

Questa implementazione del FillSchema(DataSet, SchemaType) metodo è protetta ed è progettata per l'uso da parte di un provider di dati .NET Framework.

Vedi anche

Si applica a

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs

Configura lo schema dell'oggetto specificato in base alla stringa di comando e CommandBehavior ai valori specificati.DataTableSchemaType

protected:
 virtual System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")]
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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType * System.Data.IDbCommand * System.Data.CommandBehavior -> System.Data.DataTable
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

Parametri

dataTable
DataTable

Oggetto DataTable da riempire con lo schema dall'origine dati.

schemaType
SchemaType

Uno dei SchemaType valori.

command
IDbCommand

Istruzione SQL SELECT usata per recuperare righe dall'origine dati.

behavior
CommandBehavior

Uno dei CommandBehavior valori.

Restituisce

Oggetto di DataTable che contiene informazioni sullo schema restituite dall'origine dati.

Attributi

Commenti

Il FillSchema metodo recupera lo schema dall'origine dati utilizzando .SelectCommand L'oggetto connessione associato a SelectCommand deve essere valido, ma non deve essere aperto. Se la connessione viene chiusa prima FillSchema della chiamata, viene aperta per recuperare i dati, quindi chiusa. Se la connessione è aperta prima FillSchema della chiamata, rimane aperta.

Un'operazione FillSchema aggiunge un oggetto DataTable alla destinazione DataSet. Aggiunge quindi le colonne a DataColumnCollection di DataTablee configura le proprietà seguenti DataColumn , se presenti nell'origine dati:

FillSchema configura anche le PrimaryKey proprietà e Constraints in base alle regole seguenti:

  • Se una o più colonne chiave primaria vengono restituite da SelectCommand, vengono usate come colonne chiave primaria per .DataTable

  • Se non vengono restituite colonne chiave primaria ma colonne univoche, le colonne univoche vengono usate come chiave primaria se e solo se tutte le colonne univoche non sono nullable. Se una delle colonne è nullable, viene aggiunto un oggetto UniqueConstraint a ConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite entrambe le colonne chiave primaria e le colonne univoche, le colonne chiave primaria vengono usate come colonne chiave primaria per .DataTable

Si noti che le chiavi primarie e i vincoli univoci vengono aggiunti a in base alle ConstraintCollection regole precedenti, ma altri tipi di vincolo non vengono aggiunti.

Se un indice cluster univoco viene definito in una colonna o in colonne di una tabella di SQL Server e il vincolo di chiave primaria viene definito in un set separato di colonne, verranno restituiti i nomi delle colonne nell'indice cluster. Per restituire il nome o i nomi delle colonne chiave primaria, usare un hint per la query con l'istruzione SELECT che specifica il nome dell'indice di chiave primaria. Per altre informazioni sulla specifica degli hint per la query, vedere Hint (Transact-SQL) - Query.

Se rileva colonne duplicate durante il IDataAdapter popolamento di , DataTablegenera nomi per le colonne successive, usando il modello "columnname1", "columnname2", "columnname3" e così via. Se i dati in ingresso contengono colonne senza nome, vengono posizionate nell'oggetto DataSet in base al modello "Column1", "Column2" e così via. Quando vengono aggiunti più set di risultati a DataSet ogni set di risultati viene inserito in una tabella separata. I set di risultati aggiuntivi vengono denominati aggiungendo valori integrali al nome della tabella specificato, ad esempio "Table", "Table1", "Table2" e così via. Se l'app usa nomi di colonna e tabella, assicurarsi che non ci siano conflitti con questi modelli di denominazione.

FillSchema non restituisce righe. Utilizzare il Fill metodo per aggiungere righe a un oggetto DataTable.

Annotazioni

Quando si gestiscono istruzioni SQL batch che restituiscono più risultati, l'implementazione di per il provider di FillSchema dati .NET Framework per OLE DB recupera le informazioni sullo schema solo per il primo risultato. Per recuperare informazioni sullo schema per più risultati, usare Fill con il MissingSchemaAction set su AddWithKey.

Quando si usa FillSchema, il provider di dati .NET Framework per SQL Server aggiunge una clausola FOR BROWSE all'istruzione in esecuzione. L'utente deve essere a conoscenza di potenziali effetti collaterali, ad esempio l'interferenza con l'uso di istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Note per gli eredi

Questa implementazione del FillSchema(DataSet, SchemaType) metodo è protetta ed è progettata per l'uso da parte di un provider di dati .NET Framework.

Vedi anche

Si applica a

FillSchema(DataSet, SchemaType, String)

Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs

Aggiunge un DataTable oggetto all'oggetto specificato DataSet e configura lo schema in modo che corrisponda a quello nell'origine dati in base all'oggetto specificato SchemaType e DataTable.

public:
 cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::String ^ srcTable);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
public System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * string -> System.Data.DataTable[]
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()

Parametri

dataSet
DataSet

Oggetto DataSet in cui inserire lo schema.

schemaType
SchemaType

Uno dei SchemaType valori che specificano come inserire lo schema.

srcTable
String

Nome della tabella di origine da utilizzare per il mapping delle tabelle.

Restituisce

Riferimento a una raccolta di DataTable oggetti aggiunti all'oggetto DataSet.

Attributi

Eccezioni

Impossibile trovare una tabella di origine da cui ottenere lo schema.

Esempio

Nell'esempio seguente viene utilizzata la classe derivata , SqlDataAdapter, per riempire un oggetto DataSet con lo schema e restituisce un oggetto 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

Commenti

Questo metodo recupera le informazioni sullo schema dall'origine dati usando .SelectCommand

Un'operazione FillSchema aggiunge un oggetto DataTable alla destinazione DataSet. Aggiunge quindi le colonne a DataColumnCollection di DataTablee configura le proprietà seguenti DataColumn , se presenti nell'origine dati:

FillSchema configura anche le PrimaryKey proprietà e Constraints in base alle regole seguenti:

  • Se una o più colonne chiave primaria vengono restituite da SelectCommand, vengono usate come colonne chiave primaria per .DataTable

  • Se non vengono restituite colonne chiave primaria ma colonne univoche, le colonne univoche vengono usate come chiave primaria se e solo se tutte le colonne univoche non sono nullable. Se una delle colonne è nullable, viene aggiunto un oggetto UniqueConstraint a ConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite entrambe le colonne chiave primaria e le colonne univoche, le colonne chiave primaria vengono usate come colonne chiave primaria per .DataTable

Si noti che le chiavi primarie e i vincoli univoci vengono aggiunti a in base alle ConstraintCollection regole precedenti, ma altri tipi di vincolo non vengono aggiunti.

Se un indice cluster univoco viene definito in una colonna o in colonne di una tabella di SQL Server e il vincolo di chiave primaria viene definito in un set separato di colonne, verranno restituiti i nomi delle colonne nell'indice cluster. Per restituire il nome o i nomi delle colonne chiave primaria, usare un hint per la query con l'istruzione SELECT che specifica il nome dell'indice di chiave primaria. Per altre informazioni sulla specifica degli hint per la query, vedere Hint (Transact-SQL) - Query.

Le informazioni sulla chiave primaria vengono usate durante Fill per trovare e sostituire tutte le righe le cui colonne chiave corrispondono. Se non si tratta del comportamento desiderato, usare Fill senza richiedere informazioni sullo schema.

Se rileva colonne duplicate durante il DbDataAdapter popolamento di , DataTablegenera nomi per le colonne successive, usando il modello "columnname1", "columnname2", "columnname3" e così via. Se i dati in ingresso contengono colonne senza nome, vengono posizionate nell'oggetto DataSet in base al modello "Column1", "Column2" e così via. Quando vengono aggiunti più set di risultati a DataSet ogni set di risultati viene inserito in una tabella separata. I set di risultati aggiuntivi vengono denominati aggiungendo valori integrali al nome della tabella specificato, ad esempio "Table", "Table1", "Table2" e così via. Se l'app usa nomi di colonna e tabella, assicurarsi che non ci siano conflitti con questi modelli di denominazione.

Il FillSchema metodo supporta scenari in cui DataSet contiene più DataTable oggetti i cui nomi differiscono solo per caso. In tali situazioni, FillSchema esegue un confronto con distinzione tra maiuscole e minuscole per trovare la tabella corrispondente e crea una nuova tabella se non esiste alcuna corrispondenza esatta. Il codice C# seguente illustra questo comportamento.

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

Se FillSchema viene chiamato e l'oggetto DataSet contiene solo un DataTable nome il cui nome differisce solo per caso, viene DataTable aggiornato. In questo scenario, il confronto non fa distinzione tra maiuscole e minuscole. Il codice C# seguente illustra questo comportamento.

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'oggetto IDbConnection associato al comando select deve essere valido, ma non deve essere aperto. Se l'oggetto IDbConnection viene chiuso prima FillSchema della chiamata, viene aperto per recuperare i dati, quindi chiuso. Se la connessione è aperta prima FillSchema della chiamata, viene lasciata aperta.

Annotazioni

Quando si gestiscono istruzioni SQL batch che restituiscono più risultati, l'implementazione di per il provider di FillSchema dati .NET Framework per OLE DB recupera le informazioni sullo schema solo per il primo risultato. Per recuperare informazioni sullo schema per più risultati, usare Fill con il MissingSchemaAction set su AddWithKey.

Quando si usa FillSchema, il provider di dati .NET Framework per SQL Server aggiunge una clausola FOR BROWSE all'istruzione in esecuzione. L'utente deve essere a conoscenza di potenziali effetti collaterali, ad esempio l'interferenza con l'uso di istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Vedi anche

Si applica a

FillSchema(DataTable, SchemaType)

Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs

Configura lo schema dell'oggetto specificato DataTable in base all'oggetto specificato SchemaType.

public:
 System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
Public Function FillSchema (dataTable As DataTable, schemaType As SchemaType) As DataTable

Parametri

dataTable
DataTable

Oggetto DataTable da riempire con lo schema dall'origine dati.

schemaType
SchemaType

Uno dei SchemaType valori.

Restituisce

Oggetto DataTable contenente le informazioni sullo schema restituite dall'origine dati.

Attributi

Esempio

Nell'esempio seguente viene utilizzata la classe derivata , SqlDataAdapter, per riempire un oggetto DataSet con lo schema e restituisce un oggetto 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

Commenti

Il FillSchema metodo recupera lo schema dall'origine dati utilizzando .SelectCommand L'oggetto connessione associato a SelectCommand deve essere valido, ma non deve essere aperto. Se la connessione viene chiusa prima FillSchema della chiamata, viene aperta per recuperare i dati, quindi chiusa. Se la connessione è aperta prima FillSchema della chiamata, rimane aperta.

Un'operazione FillSchema restituisce un oggetto DataTable. Aggiunge quindi le colonne a DataColumnCollection di DataTablee configura le proprietà seguenti DataColumn , se presenti nell'origine dati:

FillSchema configura anche le PrimaryKey proprietà e Constraints in base alle regole seguenti:

  • Se un oggetto PrimaryKey è già stato definito per DataTableo DataTable contiene dati, la PrimaryKey proprietà non verrà impostata.

  • Se una o più colonne chiave primaria vengono restituite da SelectCommand, vengono usate come colonne chiave primaria per .DataTable

  • Se non vengono restituite colonne chiave primaria ma colonne univoche, le colonne univoche vengono usate come chiave primaria se e solo se tutte le colonne univoche non sono nullable. Se una delle colonne è nullable, viene aggiunto un oggetto UniqueConstraint a ConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite entrambe le colonne chiave primaria e le colonne univoche, le colonne chiave primaria vengono usate come colonne chiave primaria per .DataTable

Si noti che le chiavi primarie e i vincoli univoci vengono aggiunti a in base alle ConstraintCollection regole precedenti, ma altri tipi di vincolo non vengono aggiunti. Questo processo può richiedere diversi round trip al server.

Se un indice cluster univoco viene definito in una colonna o in colonne di una tabella di SQL Server e il vincolo di chiave primaria viene definito in un set separato di colonne, verranno restituiti i nomi delle colonne nell'indice cluster. Per restituire il nome o i nomi delle colonne chiave primaria, usare un hint per la query con l'istruzione SELECT che specifica il nome dell'indice di chiave primaria. Per altre informazioni sulla specifica degli hint per la query, vedere Hint (Transact-SQL) - Query.

Se rileva colonne duplicate durante il DbDataAdapter popolamento di , DataTablegenera nomi per le colonne successive, usando il modello "columnname1", "columnname2", "columnname3" e così via. Se i dati in ingresso contengono colonne senza nome, vengono posizionate nell'oggetto DataSet in base al modello "Column1", "Column2" e così via. Quando vengono aggiunti più set di risultati a DataSet ogni set di risultati viene inserito in una tabella separata. I set di risultati aggiuntivi vengono denominati aggiungendo valori integrali al nome della tabella specificato, ad esempio "Table", "Table1", "Table2" e così via. Se l'app usa nomi di colonna e tabella, assicurarsi che non ci siano conflitti con questi modelli di denominazione.

FillSchema non restituisce righe. Utilizzare il Fill metodo per aggiungere righe a un oggetto DataTable.

Annotazioni

Quando si gestiscono istruzioni SQL batch che restituiscono più risultati, l'implementazione di per il provider di FillSchema dati .NET Framework per OLE DB recupera le informazioni sullo schema solo per il primo risultato. Per recuperare informazioni sullo schema per più risultati, usare Fill con il MissingSchemaAction set su AddWithKey.

Quando si usa FillSchema, il provider di dati .NET Framework per SQL Server aggiunge una clausola FOR BROWSE all'istruzione in esecuzione. L'utente deve essere a conoscenza di potenziali effetti collaterali, ad esempio l'interferenza con l'uso di istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Vedi anche

Si applica a

FillSchema(DataSet, SchemaType)

Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs
Origine:
DbDataAdapter.cs

Aggiunge un DataTable oggetto denominato "Table" all'oggetto specificato DataSet e configura lo schema in modo che corrisponda a quello nell'origine dati in base all'oggetto specificato SchemaType.

public:
 override cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public override 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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
Public Overrides Function FillSchema (dataSet As DataSet, schemaType As SchemaType) As DataTable()

Parametri

dataSet
DataSet

Oggetto DataSet in cui inserire lo schema.

schemaType
SchemaType

Uno dei SchemaType valori che specificano come inserire lo schema.

Restituisce

Riferimento a una raccolta di DataTable oggetti aggiunti all'oggetto DataSet.

Implementazioni

Attributi

Esempio

Nell'esempio seguente viene utilizzata la classe derivata , SqlDataAdapter, per riempire un oggetto DataSet con lo schema e restituisce un oggetto 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

Commenti

Questo metodo recupera le informazioni sullo schema dall'origine dati usando .SelectCommand

Un'operazione FillSchema aggiunge un oggetto DataTable alla destinazione DataSet. Aggiunge quindi le colonne a DataColumnCollection di DataTablee configura le proprietà seguenti DataColumn , se presenti nell'origine dati:

FillSchema configura anche le PrimaryKey proprietà e Constraints in base alle regole seguenti:

  • Se una o più colonne chiave primaria vengono restituite da SelectCommand, vengono usate come colonne chiave primaria per .DataTable

  • Se non vengono restituite colonne chiave primaria ma colonne univoche, le colonne univoche vengono usate come chiave primaria se e solo se tutte le colonne univoche non sono nullable. Se una delle colonne è nullable, viene aggiunto un oggetto UniqueConstraint a ConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite entrambe le colonne chiave primaria e le colonne univoche, le colonne chiave primaria vengono usate come colonne chiave primaria per .DataTable

Si noti che le chiavi primarie e i vincoli univoci vengono aggiunti a in base alle ConstraintCollection regole precedenti, ma altri tipi di vincolo non vengono aggiunti.

Se un indice cluster univoco viene definito in una colonna o in colonne di una tabella di SQL Server e il vincolo di chiave primaria viene definito in un set separato di colonne, verranno restituiti i nomi delle colonne nell'indice cluster. Per restituire il nome o i nomi delle colonne chiave primaria, usare un hint per la query con l'istruzione SELECT che specifica il nome dell'indice di chiave primaria. Per altre informazioni sulla specifica degli hint per la query, vedere Hint (Transact-SQL) - Query.

Le informazioni sulla chiave primaria vengono usate durante Fill per trovare e sostituire tutte le righe le cui colonne chiave corrispondono. Se non si tratta del comportamento desiderato, usare Fill senza richiedere informazioni sullo schema.

Se rileva colonne duplicate durante il IDataAdapter popolamento di , DataTablegenera nomi per le colonne successive, usando il modello "columnname1", "columnname2", "columnname3" e così via. Se i dati in ingresso contengono colonne senza nome, vengono posizionate nell'oggetto DataSet in base al modello "Column1", "Column2" e così via. Quando vengono aggiunti più set di risultati a DataSet ogni set di risultati viene inserito in una tabella separata. I set di risultati aggiuntivi vengono denominati aggiungendo valori integrali al nome della tabella specificato, ad esempio "Table", "Table1", "Table2" e così via. Se l'app usa nomi di colonna e tabella, assicurarsi che non ci siano conflitti con questi modelli di denominazione.

L'oggetto IDbConnection associato al comando select deve essere valido, ma non deve essere aperto. Se l'oggetto IDbConnection viene chiuso prima FillSchema della chiamata, viene aperto per recuperare i dati, quindi chiuso. Se la connessione è aperta prima FillSchema della chiamata, viene lasciata aperta.

Annotazioni

Quando si gestiscono istruzioni SQL batch che restituiscono più risultati, l'implementazione di per il provider di FillSchema dati .NET Framework per OLE DB recupera le informazioni sullo schema solo per il primo risultato. Per recuperare informazioni sullo schema per più risultati, usare Fill con il MissingSchemaAction set su AddWithKey.

Quando si usa FillSchema, il provider di dati .NET Framework per SQL Server aggiunge una clausola FOR BROWSE all'istruzione in esecuzione. L'utente deve essere a conoscenza di potenziali effetti collaterali, ad esempio l'interferenza con l'uso di istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Vedi anche

Si applica a