Teilen über


DbDataAdapter.FillSchema Methode

Definition

Fügt einem DataTable eine DataSet hinzu und konfiguriert das Schema so, dass es dem Schema in der Datenquelle entspricht.

Überlädt

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

Fügt dem angegebenen DataTable eine DataSet hinzu und konfiguriert das Schema auf der Grundlage des angegebenen SchemaTypeso, dass es mit dem Schema in der Datenquelle übereinstimmt.

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Konfiguriert das Schema der angegebenen DataTable auf der Grundlage des angegebenen SchemaType, der angegebenen Befehlszeichenfolge und der angegebenen CommandBehavior-Werte.

FillSchema(DataSet, SchemaType, String)

Fügt dem angegebenen DataSet eine DataTable hinzu und konfiguriert das Schema auf der Grundlage des angegebenen SchemaType und der angegebenen DataTable so, dass es mit dem Schema in der Datenquelle übereinstimmt.

FillSchema(DataTable, SchemaType)

Konfiguriert das Schema der angegebenen DataTable auf der Grundlage des angegebenen SchemaType.

FillSchema(DataSet, SchemaType)

Fügt eine DataTable namens „Tabelle“ zum angegebenen DataSet hinzu und konfiguriert das Schema auf der Grundlage des angegebenen SchemaType so, dass es mit dem Schema in der Datenquelle übereinstimmt.

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

Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs

Fügt dem angegebenen DataTable eine DataSet hinzu und konfiguriert das Schema auf der Grundlage des angegebenen SchemaTypeso, dass es mit dem Schema in der Datenquelle übereinstimmt.

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

Parameter

dataSet
DataSet

Die DataSet, die mit dem Schema aus der Datenquelle gefüllt werden soll.

schemaType
SchemaType

Einer der SchemaType-Werte.

command
IDbCommand

Die SQL-SELECT-Anweisung, mit der Zeilen aus der Datenquelle abgerufen werden.

srcTable
String

Der Name der Quelltabelle, die für die Tabellenzuordnung verwendet werden soll.

behavior
CommandBehavior

Einer der CommandBehavior-Werte.

Gibt zurück

Ein Array von DataTable-Objekten, die aus der Datenquelle zurückgegebene Schemainformationen enthalten.

Hinweise

Die FillSchema -Methode ruft das Schema mithilfe von aus der SelectCommandDatenquelle ab. Das verbindungsobjekt, das dem SelectCommand zugeordnet ist, muss gültig sein, aber es muss nicht geöffnet sein. Wenn die Verbindung geschlossen wird, bevor FillSchema aufgerufen wird, wird sie geöffnet, um Daten abzurufen, und dann geschlossen. Wenn die Verbindung geöffnet ist, bevor FillSchema aufgerufen wird, bleibt sie geöffnet.

Ein FillSchema Vorgang fügt dem Ziel DataSeteine DataTable hinzu. Anschließend werden Spalten zum DataColumnCollection von DataTablehinzugefügt und die folgenden DataColumn Eigenschaften konfiguriert, sofern sie in der Datenquelle vorhanden sind:

FillSchema konfiguriert außerdem die PrimaryKey Eigenschaften und Constraints gemäß den folgenden Regeln:

  • Wenn eine oder mehrere Primärschlüsselspalten von SelectCommandzurückgegeben werden, werden sie als Primärschlüsselspalten für verwendet DataTable.

  • Wenn keine Primärschlüsselspalten zurückgegeben werden, sondern eindeutige Spalten, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn und nur, wenn alle eindeutigen Spalten nicht aufzuheben sind. Wenn eine der Spalten NULL-Werte zulassen kann, wird der ConstraintCollectionhinzugefügtUniqueConstraint, aber die PrimaryKey -Eigenschaft ist nicht festgelegt.

  • Wenn sowohl Primärschlüsselspalten als auch eindeutige Spalten zurückgegeben werden, werden die Primärschlüsselspalten als Primärschlüsselspalten für verwendet DataTable.

Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen gemäß den vorherigen Regeln hinzugefügt ConstraintCollection werden, andere Einschränkungstypen jedoch nicht hinzugefügt werden.

Wenn ein eindeutiger gruppierter Index für eine Spalte oder Spalten in einer SQL Server Tabelle definiert ist und die Primärschlüsseleinschränkung für einen separaten Satz von Spalten definiert ist, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen der Primärschlüsselspalten zurückzugeben, verwenden Sie einen Abfragehinweis mit der SELECT-Anweisung, die den Namen des Primärschlüsselindexes angibt. Weitere Informationen zum Angeben von Abfragehinweisen finden Sie unter Hinweise (Transact-SQL) – Abfrage.

Wenn doppelte IDataAdapter Spalten beim Auffüllen eines DataTableauftreten, generiert es Namen für die nachfolgenden Spalten, wobei das Muster "Spaltenname1", "Spaltenname2", "Spaltenname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Resultsets hinzugefügt werden, wird jedes DataSet Resultset in einer separaten Tabelle platziert. Zusätzliche Resultsets werden benannt, indem integrale Werte an den angegebenen Tabellennamen angefügt werden (z. B. "Table", "Table1", "Table2" usw.). Wenn Ihre App Spalten- und Tabellennamen verwendet, stellen Sie sicher, dass keine Konflikte mit diesen Benennungsmustern auftreten.

Die FillSchema -Methode unterstützt Szenarien, in denen mehrere DataSetDataTable Objekte enthält, deren Namen sich nur nach Groß-/Kleinschreibung unterscheiden. Führt in solchen Situationen einen Vergleich zwischen Groß- und Kleinschreibung aus, FillSchema um die entsprechende Tabelle zu finden, und erstellt eine neue Tabelle, wenn keine genaue Übereinstimmung vorhanden ist. Der folgende C#-Code veranschaulicht dieses Verhalten.

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

Wenn FillSchema aufgerufen wird und nur DataSet einen DataTable enthält, dessen Name sich nur nach Groß- und Kleinschreibung unterscheidet, wird dieser DataTable aktualisiert. In diesem Szenario wird beim Vergleich die Groß-/Kleinschreibung nicht beachtet. Der folgende C#-Code veranschaulicht dieses Verhalten.

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 gibt keine Zeilen zurück. Verwenden Sie die Fill -Methode, um Zeilen zu einer DataTablehinzuzufügen.

Hinweis

Bei der Verarbeitung von SQL-Batchanweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung von FillSchema für den .NET Framework-Datenanbieter für OLE DB nur Schemainformationen für das erste Ergebnis ab. Verwenden Sie Fill zum Abrufen von Schemainformationen für mehrere Ergebnisse, wobei auf MissingSchemaAction festgelegt ist AddWithKey.

Bei der Verwendung von FillSchema fügt der .NET Framework-Datenanbieter für SQL Server eine FOR BROWSE-Klausel an die ausgeführte Anweisung an. Der Benutzer muss mögliche Nebeneffekte beachten, z. B. Beeinträchtigungen bei der Verwendung von SET FMTONLY ON-Anweisungen. Weitere Informationen finden Sie unter SET FMTONLY (Transact-SQL).

Hinweise für Vererber

Diese Implementierung der FillSchema(DataSet, SchemaType) -Methode ist geschützt und für die Verwendung durch einen .NET Framework-Datenanbieter konzipiert.

Weitere Informationen

Gilt für:

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs

Konfiguriert das Schema der angegebenen DataTable auf der Grundlage des angegebenen SchemaType, der angegebenen Befehlszeichenfolge und der angegebenen CommandBehavior-Werte.

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

Parameter

dataTable
DataTable

Die DataTable, die mit dem Schema aus der Datenquelle gefüllt werden soll.

schemaType
SchemaType

Einer der SchemaType-Werte.

command
IDbCommand

Die SQL-SELECT-Anweisung, mit der Zeilen aus der Datenquelle abgerufen werden.

behavior
CommandBehavior

Einer der CommandBehavior-Werte.

Gibt zurück

Ein DataTable-Objekt, das aus der Datenquelle zurückgegebene Schemainformationen enthält.

Hinweise

Die FillSchema -Methode ruft das Schema mithilfe von aus der SelectCommandDatenquelle ab. Das verbindungsobjekt, das dem SelectCommand zugeordnet ist, muss gültig sein, aber es muss nicht geöffnet sein. Wenn die Verbindung geschlossen wird, bevor FillSchema aufgerufen wird, wird sie geöffnet, um Daten abzurufen, und dann geschlossen. Wenn die Verbindung geöffnet ist, bevor FillSchema aufgerufen wird, bleibt sie geöffnet.

Ein FillSchema Vorgang fügt dem Ziel DataSeteine DataTable hinzu. Anschließend werden Spalten zum DataColumnCollection von DataTablehinzugefügt und die folgenden DataColumn Eigenschaften konfiguriert, sofern sie in der Datenquelle vorhanden sind:

FillSchema konfiguriert außerdem die PrimaryKey Eigenschaften und Constraints gemäß den folgenden Regeln:

  • Wenn eine oder mehrere Primärschlüsselspalten von SelectCommandzurückgegeben werden, werden sie als Primärschlüsselspalten für verwendet DataTable.

  • Wenn keine Primärschlüsselspalten zurückgegeben werden, sondern eindeutige Spalten, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn und nur, wenn alle eindeutigen Spalten nicht aufzuheben sind. Wenn eine der Spalten NULL-Werte zulassen kann, wird der ConstraintCollectionhinzugefügtUniqueConstraint, aber die PrimaryKey -Eigenschaft ist nicht festgelegt.

  • Wenn sowohl Primärschlüsselspalten als auch eindeutige Spalten zurückgegeben werden, werden die Primärschlüsselspalten als Primärschlüsselspalten für verwendet DataTable.

Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen gemäß den vorherigen Regeln hinzugefügt ConstraintCollection werden, andere Einschränkungstypen jedoch nicht hinzugefügt werden.

Wenn ein eindeutiger gruppierter Index für eine Spalte oder Spalten in einer SQL Server Tabelle definiert ist und die Primärschlüsseleinschränkung für einen separaten Satz von Spalten definiert ist, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen der Primärschlüsselspalten zurückzugeben, verwenden Sie einen Abfragehinweis mit der SELECT-Anweisung, die den Namen des Primärschlüsselindexes angibt. Weitere Informationen zum Angeben von Abfragehinweisen finden Sie unter Hinweise (Transact-SQL) – Abfrage.

Wenn doppelte IDataAdapter Spalten beim Auffüllen eines DataTableauftreten, generiert es Namen für die nachfolgenden Spalten, wobei das Muster "Spaltenname1", "Spaltenname2", "Spaltenname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Resultsets hinzugefügt werden, wird jedes DataSet Resultset in einer separaten Tabelle platziert. Zusätzliche Resultsets werden benannt, indem integrale Werte an den angegebenen Tabellennamen angefügt werden (z. B. "Table", "Table1", "Table2" usw.). Wenn Ihre App Spalten- und Tabellennamen verwendet, stellen Sie sicher, dass keine Konflikte mit diesen Benennungsmustern auftreten.

FillSchema gibt keine Zeilen zurück. Verwenden Sie die Fill -Methode, um Zeilen zu einer DataTablehinzuzufügen.

Hinweis

Bei der Verarbeitung von SQL-Batchanweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung von FillSchema für den .NET Framework-Datenanbieter für OLE DB nur Schemainformationen für das erste Ergebnis ab. Verwenden Sie Fill zum Abrufen von Schemainformationen für mehrere Ergebnisse, wobei auf MissingSchemaAction festgelegt ist AddWithKey.

Bei der Verwendung von FillSchema fügt der .NET Framework-Datenanbieter für SQL Server eine FOR BROWSE-Klausel an die ausgeführte Anweisung an. Der Benutzer muss mögliche Nebeneffekte beachten, z. B. Beeinträchtigungen bei der Verwendung von SET FMTONLY ON-Anweisungen. Weitere Informationen finden Sie unter SET FMTONLY (Transact-SQL).

Hinweise für Vererber

Diese Implementierung der FillSchema(DataSet, SchemaType) -Methode ist geschützt und für die Verwendung durch einen .NET Framework-Datenanbieter konzipiert.

Weitere Informationen

Gilt für:

FillSchema(DataSet, SchemaType, String)

Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs

Fügt dem angegebenen DataSet eine DataTable hinzu und konfiguriert das Schema auf der Grundlage des angegebenen SchemaType und der angegebenen DataTable so, dass es mit dem Schema in der Datenquelle übereinstimmt.

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

Parameter

dataSet
DataSet

Ein DataSet, in das das Schema eingefügt werden soll.

schemaType
SchemaType

Einer der SchemaType-Werte, die angeben, wie das Schema eingefügt wird.

srcTable
String

Der Name der Quelltabelle, die für die Tabellenzuordnung verwendet werden soll.

Gibt zurück

Ein Verweis auf eine Auflistung von DataTable-Objekten, die dem DataSet hinzugefügt wurden.

Ausnahmen

Eine Quelltabelle, aus der das Schema abgerufen werden soll, konnte nicht gefunden werden.

Beispiele

Im folgenden Beispiel wird die abgeleitete Klasse verwendet, SqlDataAdapterum ein DataSet mit dem Schema zu füllen, und gibt einen DataSetzurück.

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

Hinweise

Diese Methode ruft die Schemainformationen aus der Datenquelle mithilfe von SelectCommandab.

Ein FillSchema Vorgang fügt dem Ziel DataSeteinen hinzuDataTable. Anschließend werden spalten DataColumnCollection hinzugefügt DataTableund die folgenden DataColumn Eigenschaften konfiguriert, sofern sie an der Datenquelle vorhanden sind:

FillSchema konfiguriert außerdem die PrimaryKey Eigenschaften und Constraints gemäß den folgenden Regeln:

  • Wenn eine oder mehrere Primärschlüsselspalten von SelectCommandzurückgegeben werden, werden sie als Primärschlüsselspalten für verwendet DataTable.

  • Wenn keine Primärschlüsselspalten zurückgegeben werden, sondern eindeutige Spalten, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn und nur dann, wenn alle eindeutigen Spalten nicht annullierbar sind. Wenn eine der Spalten nullable ist, wird ein UniqueConstraint hinzugefügt ConstraintCollection, aber die PrimaryKey -Eigenschaft ist nicht festgelegt.

  • Wenn sowohl Primärschlüsselspalten als auch eindeutige Spalten zurückgegeben werden, werden die Primärschlüsselspalten als Primärschlüsselspalten für verwendet DataTable.

Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen gemäß den ConstraintCollection vorherigen Regeln hinzugefügt werden, aber keine anderen Einschränkungstypen hinzugefügt werden.

Wenn ein eindeutiger gruppierter Index für eine Spalte oder Spalten in einer SQL Server Tabelle definiert ist und die Primärschlüsseleinschränkung für einen separaten Satz von Spalten definiert ist, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder die Namen der Primärschlüsselspalten zurückzugeben, verwenden Sie einen Abfragehinweis mit der SELECT-Anweisung, die den Namen des Primärschlüsselindexes angibt. Weitere Informationen zum Angeben von Abfragehinweisen finden Sie unter Hinweise (Transact-SQL) – Abfrage.

Primärschlüsselinformationen werden während der Zeit Fill verwendet, um alle Zeilen zu finden und zu ersetzen, deren Schlüsselspalten übereinstimmen. Wenn dies nicht das gewünschte Verhalten ist, verwenden Sie Fill , ohne Schemainformationen anzufordern.

Wenn doppelte DbDataAdapter Spalten beim Auffüllen eines DataTableauftreten, generiert es Namen für die nachfolgenden Spalten unter Verwendung des Musters "Spaltenname1", "Spaltenname2", "Spaltenname3" usw. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Resultsets hinzugefügt werden, wird jedes DataSet Resultset in einer separaten Tabelle platziert. Zusätzliche Resultsets werden benannt, indem integrale Werte an den angegebenen Tabellennamen angefügt werden (z. B. "Table", "Table1", "Table2" usw.). Wenn Ihre App Spalten- und Tabellennamen verwendet, stellen Sie sicher, dass keine Konflikte mit diesen Benennungsmustern auftreten.

Die FillSchema -Methode unterstützt Szenarien, in denen das DataSet mehrere DataTable Objekte enthält, deren Namen sich nur nach Groß- und Kleinschreibung unterscheiden. Führt in solchen Situationen einen Vergleich zwischen Groß- und Kleinschreibung durch, FillSchema um die entsprechende Tabelle zu finden, und erstellt eine neue Tabelle, wenn keine genaue Übereinstimmung vorhanden ist. Der folgende C#-Code veranschaulicht dieses Verhalten.

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

Wenn FillSchema aufgerufen wird und nur einen DataTable enthält, dessen Name sich nur nach Groß- und DataSet Kleinschreibung unterscheidet, wird dies DataTable aktualisiert. In diesem Szenario wird beim Vergleich die Groß-/Kleinschreibung nicht beachtet. Der folgende C#-Code veranschaulicht dieses Verhalten.

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.  

Das IDbConnection dem Befehl select zugeordnete Objekt muss gültig sein, muss aber nicht geöffnet werden. Wenn geschlossen IDbConnection ist, bevor FillSchema aufgerufen wird, wird es geöffnet, um Daten abzurufen, und dann geschlossen. Wenn die Verbindung geöffnet ist, bevor FillSchema sie aufgerufen wird, bleibt sie geöffnet.

Hinweis

Beim Behandeln von SQL-Batchanweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung von FillSchema für den .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Um Schemainformationen für mehrere Ergebnisse abzurufen, verwenden Sie Fill mit festgelegt MissingSchemaAction auf AddWithKey.

Bei der Verwendung von FillSchema fügt der .NET Framework-Datenanbieter für SQL Server eine FOR BROWSE-Klausel an die ausgeführte Anweisung an. Der Benutzer muss mögliche Nebeneffekte beachten, z. B. Beeinträchtigungen bei der Verwendung von SET FMTONLY ON-Anweisungen. Weitere Informationen finden Sie unter SET FMTONLY (Transact-SQL).

Weitere Informationen

Gilt für:

FillSchema(DataTable, SchemaType)

Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs

Konfiguriert das Schema der angegebenen DataTable auf der Grundlage des angegebenen 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);
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

Parameter

dataTable
DataTable

Die DataTable, die mit dem Schema aus der Datenquelle gefüllt werden soll.

schemaType
SchemaType

Einer der SchemaType-Werte.

Gibt zurück

Eine DataTable, die die von der Datenquelle zurückgegebenen Schemainformationen enthält.

Beispiele

Im folgenden Beispiel wird die abgeleitete Klasse verwendet, SqlDataAdapterum ein DataSet mit dem Schema zu füllen, und gibt einen DataTablezurück.

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

Hinweise

Die FillSchema -Methode ruft das Schema mithilfe von aus der SelectCommandDatenquelle ab. Das dem zugeordnete SelectCommand Verbindungsobjekt muss gültig sein, muss aber nicht geöffnet sein. Wenn die Verbindung geschlossen wird, bevor FillSchema sie aufgerufen wird, wird sie geöffnet, um Daten abzurufen, und dann geschlossen. Wenn die Verbindung geöffnet ist, bevor FillSchema sie aufgerufen wird, bleibt sie geöffnet.

Ein FillSchema Vorgang gibt einen DataTablezurück. Anschließend werden spalten DataColumnCollection hinzugefügt DataTableund die folgenden DataColumn Eigenschaften konfiguriert, sofern sie an der Datenquelle vorhanden sind:

FillSchema konfiguriert außerdem die PrimaryKey Eigenschaften und Constraints gemäß den folgenden Regeln:

  • Wenn bereits ein PrimaryKey für die DataTable- oder enthält DataTable -Daten definiert wurde, wird die PrimaryKey -Eigenschaft nicht festgelegt.

  • Wenn eine oder mehrere Primärschlüsselspalten von SelectCommandzurückgegeben werden, werden sie als Primärschlüsselspalten für verwendet DataTable.

  • Wenn keine Primärschlüsselspalten zurückgegeben werden, sondern eindeutige Spalten, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn und nur dann, wenn alle eindeutigen Spalten nicht annullierbar sind. Wenn eine der Spalten nullable ist, wird ein UniqueConstraint hinzugefügt ConstraintCollection, aber die PrimaryKey -Eigenschaft ist nicht festgelegt.

  • Wenn sowohl Primärschlüsselspalten als auch eindeutige Spalten zurückgegeben werden, werden die Primärschlüsselspalten als Primärschlüsselspalten für verwendet DataTable.

Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen gemäß den ConstraintCollection vorherigen Regeln hinzugefügt werden, aber keine anderen Einschränkungstypen hinzugefügt werden. Dieser Prozess erfordert möglicherweise mehrere Roundtrips zum Server.

Wenn ein eindeutiger gruppierter Index für eine Spalte oder Spalten in einer SQL Server Tabelle definiert ist und die Primärschlüsseleinschränkung für einen separaten Satz von Spalten definiert ist, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder die Namen der Primärschlüsselspalten zurückzugeben, verwenden Sie einen Abfragehinweis mit der SELECT-Anweisung, die den Namen des Primärschlüsselindexes angibt. Weitere Informationen zum Angeben von Abfragehinweisen finden Sie unter Hinweise (Transact-SQL) – Abfrage.

Wenn doppelte DbDataAdapter Spalten beim Auffüllen eines DataTableauftreten, generiert es Namen für die nachfolgenden Spalten unter Verwendung des Musters "Spaltenname1", "Spaltenname2", "Spaltenname3" usw. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Resultsets hinzugefügt werden, wird jedes DataSet Resultset in einer separaten Tabelle platziert. Zusätzliche Resultsets werden benannt, indem integrale Werte an den angegebenen Tabellennamen angefügt werden (z. B. "Table", "Table1", "Table2" usw.). Wenn Ihre App Spalten- und Tabellennamen verwendet, stellen Sie sicher, dass keine Konflikte mit diesen Benennungsmustern auftreten.

FillSchema gibt keine Zeilen zurück. Verwenden Sie die Fill -Methode, um Zeilen zu hinzuzufügen DataTable.

Hinweis

Beim Behandeln von SQL-Batchanweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung von FillSchema für den .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Um Schemainformationen für mehrere Ergebnisse abzurufen, verwenden Sie Fill mit festgelegt MissingSchemaAction auf AddWithKey.

Bei der Verwendung von FillSchema fügt der .NET Framework-Datenanbieter für SQL Server eine FOR BROWSE-Klausel an die ausgeführte Anweisung an. Der Benutzer muss mögliche Nebeneffekte beachten, z. B. Beeinträchtigungen bei der Verwendung von SET FMTONLY ON-Anweisungen. Weitere Informationen finden Sie unter SET FMTONLY (Transact-SQL).

Weitere Informationen

Gilt für:

FillSchema(DataSet, SchemaType)

Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs
Quelle:
DbDataAdapter.cs

Fügt eine DataTable namens „Tabelle“ zum angegebenen DataSet hinzu und konfiguriert das Schema auf der Grundlage des angegebenen SchemaType so, dass es mit dem Schema in der Datenquelle übereinstimmt.

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

Parameter

dataSet
DataSet

Ein DataSet, in das das Schema eingefügt werden soll.

schemaType
SchemaType

Einer der SchemaType-Werte, die angeben, wie das Schema eingefügt wird.

Gibt zurück

Ein Verweis auf eine Auflistung von DataTable-Objekten, die dem DataSet hinzugefügt wurden.

Implementiert

Beispiele

Im folgenden Beispiel wird die abgeleitete Klasse verwendet, SqlDataAdapterum ein DataSet mit dem Schema zu füllen, und gibt einen DataSetzurück.

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

Hinweise

Diese Methode ruft die Schemainformationen aus der Datenquelle mithilfe von SelectCommandab.

Ein FillSchema Vorgang fügt dem Ziel DataSeteinen hinzuDataTable. Anschließend werden spalten DataColumnCollection hinzugefügt DataTableund die folgenden DataColumn Eigenschaften konfiguriert, sofern sie an der Datenquelle vorhanden sind:

FillSchema konfiguriert außerdem die PrimaryKey Eigenschaften und Constraints gemäß den folgenden Regeln:

  • Wenn eine oder mehrere Primärschlüsselspalten von SelectCommandzurückgegeben werden, werden sie als Primärschlüsselspalten für verwendet DataTable.

  • Wenn keine Primärschlüsselspalten zurückgegeben werden, sondern eindeutige Spalten, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn und nur dann, wenn alle eindeutigen Spalten nicht annullierbar sind. Wenn eine der Spalten nullable ist, wird ein UniqueConstraint hinzugefügt ConstraintCollection, aber die PrimaryKey -Eigenschaft ist nicht festgelegt.

  • Wenn sowohl Primärschlüsselspalten als auch eindeutige Spalten zurückgegeben werden, werden die Primärschlüsselspalten als Primärschlüsselspalten für verwendet DataTable.

Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen gemäß den ConstraintCollection vorherigen Regeln hinzugefügt werden, aber keine anderen Einschränkungstypen hinzugefügt werden.

Wenn ein eindeutiger gruppierter Index für eine Spalte oder Spalten in einer SQL Server Tabelle definiert ist und die Primärschlüsseleinschränkung für einen separaten Satz von Spalten definiert ist, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder die Namen der Primärschlüsselspalten zurückzugeben, verwenden Sie einen Abfragehinweis mit der SELECT-Anweisung, die den Namen des Primärschlüsselindexes angibt. Weitere Informationen zum Angeben von Abfragehinweisen finden Sie unter Hinweise (Transact-SQL) – Abfrage.

Primärschlüsselinformationen werden während der Zeit Fill verwendet, um alle Zeilen zu finden und zu ersetzen, deren Schlüsselspalten übereinstimmen. Wenn dies nicht das gewünschte Verhalten ist, verwenden Sie Fill , ohne Schemainformationen anzufordern.

Wenn doppelte IDataAdapter Spalten beim Auffüllen eines DataTableauftreten, generiert es Namen für die nachfolgenden Spalten unter Verwendung des Musters "Spaltenname1", "Spaltenname2", "Spaltenname3" usw. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Resultsets hinzugefügt werden, wird jedes DataSet Resultset in einer separaten Tabelle platziert. Zusätzliche Resultsets werden benannt, indem integrale Werte an den angegebenen Tabellennamen angefügt werden (z. B. "Table", "Table1", "Table2" usw.). Wenn Ihre App Spalten- und Tabellennamen verwendet, stellen Sie sicher, dass keine Konflikte mit diesen Benennungsmustern auftreten.

Das IDbConnection dem Befehl select zugeordnete Objekt muss gültig sein, muss aber nicht geöffnet werden. Wenn geschlossen IDbConnection ist, bevor FillSchema aufgerufen wird, wird es geöffnet, um Daten abzurufen, und dann geschlossen. Wenn die Verbindung geöffnet ist, bevor FillSchema sie aufgerufen wird, bleibt sie geöffnet.

Hinweis

Beim Behandeln von SQL-Batchanweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung von FillSchema für den .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Um Schemainformationen für mehrere Ergebnisse abzurufen, verwenden Sie Fill mit festgelegt MissingSchemaAction auf AddWithKey.

Bei der Verwendung von FillSchema fügt der .NET Framework-Datenanbieter für SQL Server eine FOR BROWSE-Klausel an die ausgeführte Anweisung an. Der Benutzer muss mögliche Nebeneffekte beachten, z. B. Beeinträchtigungen bei der Verwendung von SET FMTONLY ON-Anweisungen. Weitere Informationen finden Sie unter SET FMTONLY (Transact-SQL).

Weitere Informationen

Gilt für: