Condividi tramite


DbDataAdapter.FillSchema Metodo

Definizione

Aggiunge un oggetto DataTable a un DataSet e configura lo schema affinché corrisponda a quello dell'origine dati.

Overload

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

Aggiunge un oggetto DataTable all'oggetto DataSet specificato e di configurare lo schema in modo che corrisponda a quello dell'origine dati basato sull'oggetto SchemaType specificato.

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Configura lo schema dell'oggetto DataTable specificato, una stringa di comando SchemaType e valori di CommandBehavior.

FillSchema(DataSet, SchemaType, String)

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

FillSchema(DataTable, SchemaType)

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

FillSchema(DataSet, SchemaType)

Aggiunge un oggetto DataTable denominato "Table" all'oggetto DataSet specificato e configura lo schema perché corrisponda a quello presente nell'origine dati basato sull'oggetto SchemaType specificato.

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

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

Aggiunge un oggetto DataTable all'oggetto DataSet specificato e di configurare lo schema in modo che corrisponda a quello dell'origine dati basato sull'oggetto SchemaType specificato.

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

Parametri

dataSet
DataSet

Oggetto DataSet in cui inserire lo schema dall'origine dati.

schemaType
SchemaType

Uno dei valori di SchemaType.

command
IDbCommand

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

srcTable
String

Nome della tabella di origine da usare per il mapping di tabelle.

behavior
CommandBehavior

Uno dei valori di CommandBehavior.

Restituisce

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

Commenti

Il FillSchema metodo recupera lo schema dall'origine dati usando .SelectCommand L'oggetto connessione associato SelectCommand a 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 DataTable oggetto 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 a UniqueConstraintConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite sia le colonne chiave primaria che 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 in una tabella 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 di 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 in DataSet 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 vi siano conflitti con questi modelli di denominazione.

Il FillSchema metodo supporta scenari in cui contiene DataSet più DataTable oggetti i cui nomi differiscono solo per maiuscole e minuscole. 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 un solo DataTable nome il cui nome è diverso 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. Usare il Fill metodo per aggiungere righe a un oggetto DataTable.

Nota

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

Quando si utilizza FillSchema, il provider di dati .NET Framework di SQL Server aggiunge una clausola FOR BROWSE all'istruzione da eseguire. È necessario essere consapevoli dei potenziali effetti secondari, quale ad esempio un'interferenza con l'utilizzo delle 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)

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

Configura lo schema dell'oggetto DataTable specificato, una stringa di comando SchemaType e valori di CommandBehavior.

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

Parametri

dataTable
DataTable

Oggetto DataTable in cui inserire lo schema dall'origine dati.

schemaType
SchemaType

Uno dei valori di SchemaType.

command
IDbCommand

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

behavior
CommandBehavior

Uno dei valori di CommandBehavior.

Restituisce

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

Commenti

Il FillSchema metodo recupera lo schema dall'origine dati usando .SelectCommand L'oggetto connessione associato SelectCommand a 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 DataTable oggetto 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 a UniqueConstraintConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite sia le colonne chiave primaria che 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 in una tabella 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 di 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 in DataSet 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 vi siano conflitti con questi modelli di denominazione.

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

Nota

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

Quando si utilizza FillSchema, il provider di dati .NET Framework di SQL Server aggiunge una clausola FOR BROWSE all'istruzione da eseguire. È necessario essere consapevoli dei potenziali effetti secondari, quale ad esempio un'interferenza con l'utilizzo delle 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)

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

Aggiunge un oggetto DataTable all'oggetto DataSet specificato e configura lo schema in modo che corrisponda a quello dell'origine dati in base a SchemaType e 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()

Parametri

dataSet
DataSet

Oggetto DataSet in cui inserire lo schema.

schemaType
SchemaType

Uno dei valori di SchemaType che specifica la modalità di inserimento dello schema.

srcTable
String

Nome della tabella di origine da usare per il mapping di tabelle.

Restituisce

Riferimento a una raccolta di oggetti DataTable aggiunti a DataSet.

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 DataSet oggetto 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 DataTable oggetto 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 a UniqueConstraintConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite sia le colonne chiave primaria che 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 in una tabella 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 di 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 questo non è il 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 in DataSet 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 vi siano conflitti con questi modelli di denominazione.

Il FillSchema metodo supporta scenari in cui contiene DataSet più DataTable oggetti i cui nomi differiscono solo per maiuscole e minuscole. 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 un solo DataTable nome il cui nome è diverso 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.

Nota

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

Quando si utilizza FillSchema, il provider di dati .NET Framework di SQL Server aggiunge una clausola FOR BROWSE all'istruzione da eseguire. È necessario essere consapevoli dei potenziali effetti secondari, quale ad esempio un'interferenza con l'utilizzo delle istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Vedi anche

Si applica a

FillSchema(DataTable, SchemaType)

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

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

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

Parametri

dataTable
DataTable

Oggetto DataTable in cui inserire lo schema dall'origine dati.

schemaType
SchemaType

Uno dei valori di SchemaType.

Restituisce

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

Esempio

Nell'esempio seguente viene utilizzata la classe derivata, SqlDataAdapter, per riempire un DataSet oggetto 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 usando .SelectCommand L'oggetto connessione associato SelectCommand a 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 a UniqueConstraintConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite sia le colonne chiave primaria che 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 in una tabella 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 di 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 in DataSet 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 vi siano conflitti con questi modelli di denominazione.

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

Nota

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

Quando si utilizza FillSchema, il provider di dati .NET Framework di SQL Server aggiunge una clausola FOR BROWSE all'istruzione da eseguire. È necessario essere consapevoli dei potenziali effetti secondari, quale ad esempio un'interferenza con l'utilizzo delle istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Vedi anche

Si applica a

FillSchema(DataSet, SchemaType)

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

Aggiunge un oggetto DataTable denominato "Table" all'oggetto DataSet specificato e configura lo schema perché corrisponda a quello presente nell'origine dati basato sull'oggetto SchemaType specificato.

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

Parametri

dataSet
DataSet

Oggetto DataSet in cui inserire lo schema.

schemaType
SchemaType

Uno dei valori di SchemaType che specifica la modalità di inserimento dello schema.

Restituisce

Riferimento a una raccolta di oggetti DataTable aggiunti a DataSet.

Implementazioni

Esempio

Nell'esempio seguente viene utilizzata la classe derivata, SqlDataAdapter, per riempire un DataSet oggetto 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 DataTable oggetto 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 a UniqueConstraintConstraintCollection, ma la PrimaryKey proprietà non è impostata.

  • Se vengono restituite sia le colonne chiave primaria che 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 in una tabella 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 di 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 questo non è il 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 in DataSet 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 siano presenti 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 di essere chiamato, viene aperto per recuperare i dati, quindi chiuso. Se la connessione è aperta prima FillSchema della chiamata, viene lasciata aperta.

Nota

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 le informazioni sullo schema per più risultati, usare Fill con il MissingSchemaAction set su AddWithKey.

Quando si utilizza FillSchema, il provider di dati .NET Framework di SQL Server aggiunge una clausola FOR BROWSE all'istruzione da eseguire. È necessario essere consapevoli dei potenziali effetti secondari, quale ad esempio un'interferenza con l'utilizzo delle istruzioni SET FMTONLY ON. Per altre informazioni, vedere SET FMTONLY (Transact-SQL).

Vedi anche

Si applica a