Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo DbDataAdapter.FillSchema (DataSet, SchemaType, String)

 

Data di pubblicazione: ottobre 2016

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

Spazio dei nomi:   System.Data.Common
Assembly:  System.Data (in System.Data.dll)

public DataTable[] FillSchema(
	DataSet dataSet,
	SchemaType schemaType,
	string srcTable
)

Parametri

dataSet
Type: System.Data.DataSet

Oggetto DataSet in cui inserire lo schema.

schemaType
Type: System.Data.SchemaType

Uno dei valori di SchemaType che specifica come inserire lo schema.

srcTable
Type: System.String

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

Valore restituito

Type: System.Data.DataTable[]

Riferimento a una raccolta di oggetti DataTable aggiunti a DataSet.

Exception Condition
ArgumentException

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

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

Oggetto FillSchema consente di aggiungere un DataTable alla destinazione DataSet. Aggiunge quindi le colonne per la DataColumnCollection del DataTable, e configura gli elementi seguenti DataColumn proprietà se esistono nell'origine dati:

FillSchema Configura inoltre la PrimaryKey e Constraints proprietà in base alle regole seguenti:

  • Se uno o più colonne chiave primaria vengono restituite dal SelectCommand, utilizzate come colonne chiave primaria per il DataTable.

  • Se viene restituita alcuna colonna di chiave primaria, ma sono colonne univoche, le colonne univoche vengono utilizzate come chiave primaria se e solo se tutte le colonne univoche sono ammessi valori null. Se una delle colonne sono nullable, un UniqueConstraint viene aggiunto per il ConstraintCollection, ma il PrimaryKey non è impostata.

  • Se vengono restituite sia colonne chiave primaria che colonne univoche, le colonne chiave primaria vengono utilizzate come colonne chiave primaria per il DataTable.

Si noti che le chiavi primarie e i vincoli unique vengono aggiunto il ConstraintCollection in base alle regole precedenti, ma altri vincoli non vengono aggiunti i tipi.

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

Informazioni sulla chiave primarie viene utilizzati durante Fill per trovare e sostituire tutte le righe le cui colonne chiave corrispondono. Se non si tratta del comportamento desiderato, utilizzare Fill senza richiedere informazioni sullo schema.

Se il DbDataAdapter rileva colonne duplicate durante la compilazione di un DataTable, genera nomi per le colonne successive utilizzando il modello "columnname1", "columnname2","columnname3" e così via. Se i dati in arrivo contengono colonne senza nome, vengono inseriti nel DataSet secondo il criterio "Column1", "Column2" e così via. Quando vengono aggiunte più set di risultati per il DataSet ogni set di risultati viene inserito in una tabella separata. Set di risultati aggiuntivi sono denominati aggiungendo i valori integrali al nome della tabella specificato (ad esempio, "Table", "Table1", "Table2" e così via.). Applicazioni che utilizzano nomi di colonna e tabella è necessario assicurarsi che non si verifichino conflitti con i criteri di denominazione.

Il FillSchema metodo supporta scenari in cui la DataSet contiene più DataTable oggetti i cui nomi differiscono solo per i casi. In tali situazioni, FillSchema esegue un confronto tra maiuscole e minuscole per trovare la tabella corrispondente e crea una nuova tabella se non esiste alcuna corrispondenza esatta. Il codice c# seguente viene illustrato 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 il DataSet contiene una sola DataTable il cui nome differisce solo per i casi che DataTable viene aggiornato. In questo scenario, il confronto viene fatta distinzione tra maiuscole e minuscole. Il codice c# seguente viene illustrato 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.

Il IDbConnection oggetto associato al comando select deve essere valido, ma non è necessario aprire. Se il IDbConnection viene chiuso prima FillSchema viene chiamato, verrà aperta per recuperare i dati, quindi chiusa. Se la connessione è aperta prima di FillSchema viene chiamato, viene lasciato aperto.

System_CAPS_noteNota

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

Quando si utilizza FillSchema, il Provider di dati .NET Framework per SQL Server aggiunge una clausola FOR BROWSE all'istruzione da eseguire. L'utente è necessario essere consapevole dei potenziali effetti collaterali, ad esempio interferenza con l'utilizzo di istruzioni SET FMTONLY ON. Per ulteriori informazioni, vedere la documentazione Online di SQL Server.

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

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: