DbDataAdapter.FillSchema Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
- 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:
AutoIncrement. È necessario impostare AutoIncrementStep e AutoIncrementSeed separatamente.
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
- 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:
AutoIncrement. È necessario impostare AutoIncrementStep e AutoIncrementSeed separatamente.
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
- 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:
AutoIncrement. È necessario impostare AutoIncrementStep e AutoIncrementSeed separatamente.
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
- 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:
AutoIncrement. È necessario impostare AutoIncrementStep e AutoIncrementSeed separatamente.
FillSchema configura anche le PrimaryKey proprietà e Constraints in base alle regole seguenti:
Se un oggetto PrimaryKey è già stato definito per
DataTable
oDataTable
contiene dati, laPrimaryKey
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
- 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:
AutoIncrement. È necessario impostare AutoIncrementStep e AutoIncrementSeed separatamente.
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).