DbDataAdapter.FillSchema Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ü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)
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
- 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 aus der Datenquelle mithilfe der SelectCommand. Das mit der SelectCommand Verbindung verknüpfte Verbindungsobjekt muss gültig sein, muss aber nicht geöffnet sein. Wenn die Verbindung vor FillSchema dem Aufruf geschlossen 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 fügt dem Ziel einen DataTable hinzu DataSet. Anschließend werden der DataColumnCollection DataTableSpalte Spalten hinzugefügt und die folgenden DataColumn Eigenschaften konfiguriert, wenn sie in der Datenquelle vorhanden sind:
AutoIncrement. Sie müssen festlegen und AutoIncrementSeed separat festlegenAutoIncrementStep.
FillSchema konfiguriert außerdem die PrimaryKey und Constraints die Eigenschaften entsprechend den folgenden Regeln:
Wenn mindestens eine Primärschlüsselspalte von der SelectCommandzurückgegeben wird, werden sie als Primärschlüsselspalten für die DataTable.
Wenn keine Primärschlüsselspalten zurückgegeben werden, aber eindeutige Spalten sind, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn, und nur dann, wenn alle eindeutigen Spalten nicht ullierbar sind. Wenn eine der Spalten nullfähig ist, wird eine UniqueConstraint der ConstraintCollectionSpalten hinzugefügt, die Eigenschaft wird jedoch PrimaryKey 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 die DataTable.
Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen den vorherigen Regeln hinzugefügt ConstraintCollection werden, andere Einschränkungstypen werden jedoch nicht hinzugefügt.
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 wird, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder 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 die IDataAdapter doppelten Spalten beim Auffüllen einer DataTableSpalte auftreten, generiert sie Namen für die nachfolgenden Spalten, wobei das Muster "columnname1", "columnname2", "columnname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn dem einzelnen Resultset mehrere Ergebnissätze hinzugefügt DataSet werden, wird in einer separaten Tabelle platziert. Zusätzliche Ergebnissätze werden durch Anfügen von integralen Werten an den angegebenen Tabellennamen benannt (z. B. "Tabelle", "Tabelle1", "Tabelle2" 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 DataSet Objekte enthalten DataTable sind, deren Namen sich nur nach Groß-/Kleinschreibung unterscheiden. In solchen Situationen FillSchema führt ein Vergleich zwischen Groß- und Kleinschreibung aus, 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".
Wird FillSchema aufgerufen und DataSet enthält nur einen DataTable , dessen Name sich nur nach Groß-/Kleinschreibung unterscheidet, wird dies DataTable aktualisiert. In diesem Szenario ist 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 DataTable.
Hinweis
Beim Behandeln von Batch-SQL-Anweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung FillSchema für die .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Verwenden Sie Fill zum Abrufen von Schemainformationen für mehrere Ergebnisse den MissingSchemaAction Satz 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).
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.
Siehe auch
Gilt für:
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.
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
- 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 aus der Datenquelle mithilfe der SelectCommand. Das mit der SelectCommand Verbindung verknüpfte Verbindungsobjekt muss gültig sein, muss aber nicht geöffnet sein. Wenn die Verbindung vor FillSchema dem Aufruf geschlossen 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 fügt dem Ziel einen DataTable hinzu DataSet. Anschließend werden der DataColumnCollection DataTableSpalte Spalten hinzugefügt und die folgenden DataColumn Eigenschaften konfiguriert, wenn sie in der Datenquelle vorhanden sind:
AutoIncrement. Sie müssen festlegen und AutoIncrementSeed separat festlegenAutoIncrementStep.
FillSchema konfiguriert außerdem die PrimaryKey und Constraints die Eigenschaften entsprechend den folgenden Regeln:
Wenn mindestens eine Primärschlüsselspalte von der SelectCommandzurückgegeben wird, werden sie als Primärschlüsselspalten für die DataTable.
Wenn keine Primärschlüsselspalten zurückgegeben werden, aber eindeutige Spalten sind, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn, und nur dann, wenn alle eindeutigen Spalten nicht ullierbar sind. Wenn eine der Spalten nullfähig ist, wird eine UniqueConstraint der ConstraintCollectionSpalten hinzugefügt, die Eigenschaft wird jedoch PrimaryKey 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 die DataTable.
Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen den vorherigen Regeln hinzugefügt ConstraintCollection werden, andere Einschränkungstypen werden jedoch nicht hinzugefügt.
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 wird, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder 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 die IDataAdapter doppelten Spalten beim Auffüllen einer DataTableSpalte auftreten, generiert sie Namen für die nachfolgenden Spalten, wobei das Muster "columnname1", "columnname2", "columnname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn dem einzelnen Resultset mehrere Ergebnissätze hinzugefügt DataSet werden, wird in einer separaten Tabelle platziert. Zusätzliche Ergebnissätze werden durch Anfügen von integralen Werten an den angegebenen Tabellennamen benannt (z. B. "Tabelle", "Tabelle1", "Tabelle2" 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 DataTable.
Hinweis
Beim Behandeln von Batch-SQL-Anweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung FillSchema für die .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Verwenden Sie Fill zum Abrufen von Schemainformationen für mehrere Ergebnisse den MissingSchemaAction Satz 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).
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.
Siehe auch
Gilt für:
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.
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
- 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 Schema auszufüllen und eine 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
Hinweise
Diese Methode ruft die Schemainformationen aus der Datenquelle mithilfe der SelectCommand.
Ein FillSchema Vorgang fügt dem Ziel einen DataTable hinzu DataSet. Anschließend werden der DataColumnCollection DataTableSpalte Spalten hinzugefügt und die folgenden DataColumn Eigenschaften konfiguriert, wenn sie in der Datenquelle vorhanden sind:
AutoIncrement. Sie müssen festlegen und AutoIncrementSeed separat festlegenAutoIncrementStep.
FillSchema konfiguriert außerdem die PrimaryKey und Constraints die Eigenschaften entsprechend den folgenden Regeln:
Wenn mindestens eine Primärschlüsselspalte von der SelectCommandzurückgegeben wird, werden sie als Primärschlüsselspalten für die DataTable.
Wenn keine Primärschlüsselspalten zurückgegeben werden, aber eindeutige Spalten sind, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn, und nur dann, wenn alle eindeutigen Spalten nicht ullierbar sind. Wenn eine der Spalten nullfähig ist, wird eine UniqueConstraint der ConstraintCollectionSpalten hinzugefügt, die Eigenschaft wird jedoch PrimaryKey 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 die DataTable.
Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen den vorherigen Regeln hinzugefügt ConstraintCollection werden, andere Einschränkungstypen werden jedoch nicht hinzugefügt.
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 wird, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder 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 Fill des Suchens und Ersetzens von Zeilen verwendet, deren Schlüsselspalten übereinstimmen. Wenn dies nicht das gewünschte Verhalten ist, verwenden Sie Fill sie, ohne Schemainformationen anzufordern.
Wenn die DbDataAdapter doppelten Spalten beim Auffüllen einer DataTableSpalte auftreten, generiert sie Namen für die nachfolgenden Spalten, wobei das Muster "columnname1", "columnname2", "columnname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn dem einzelnen Resultset mehrere Ergebnissätze hinzugefügt DataSet werden, wird in einer separaten Tabelle platziert. Zusätzliche Ergebnissätze werden durch Anfügen von integralen Werten an den angegebenen Tabellennamen benannt (z. B. "Tabelle", "Tabelle1", "Tabelle2" 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 DataSet Objekte enthalten DataTable sind, deren Namen sich nur nach Groß-/Kleinschreibung unterscheiden. In solchen Situationen FillSchema führt ein Vergleich zwischen Groß- und Kleinschreibung aus, 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".
Wird FillSchema aufgerufen und DataSet enthält nur einen DataTable , dessen Name sich nur nach Groß-/Kleinschreibung unterscheidet, wird dies DataTable aktualisiert. In diesem Szenario ist 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 Auswahlbefehl zugeordnete Objekt muss gültig sein, muss jedoch nicht geöffnet werden. Wenn die IDbConnection Datei vor FillSchema dem Aufruf geschlossen 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.
Hinweis
Beim Behandeln von Batch-SQL-Anweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung FillSchema für die .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Verwenden Sie Fill zum Abrufen von Schemainformationen für mehrere Ergebnisse den MissingSchemaAction Satz 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).
Siehe auch
Gilt für:
FillSchema(DataTable, SchemaType)
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
- 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 Schema auszufüllen und eine 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
Hinweise
Die FillSchema Methode ruft das Schema aus der Datenquelle mithilfe der SelectCommand. Das mit der SelectCommand Verbindung verknüpfte Verbindungsobjekt muss gültig sein, muss jedoch nicht geöffnet werden. Wenn die Verbindung vor FillSchema dem Aufruf geschlossen wird, wird sie geöffnet, um Daten abzurufen, und dann geschlossen. Wenn die Verbindung vor dem Aufruf geöffnet ist, bleibt sie geöffnet FillSchema .
Ein FillSchema Vorgang gibt einen DataTableWert zurück. Anschließend wird den folgenden Eigenschaften Spalten DataColumnCollection DataTablehinzugefügt und die folgenden DataColumn Eigenschaften konfiguriert, wenn sie in der Datenquelle vorhanden sind:
AutoIncrement. Sie müssen festlegen und AutoIncrementSeed separat festlegenAutoIncrementStep.
FillSchemakonfiguriert auch die und Constraints die PrimaryKey Eigenschaften gemäß den folgenden Regeln:
Wenn eine PrimaryKey bereits für die
DataTable
Daten definiert wurde oder die Daten enthält, wird diePrimaryKey
DataTable
Eigenschaft nicht festgelegt.Wenn mindestens eine Primärschlüsselspalte von der SelectCommandzurückgegeben wird, werden sie als Primärschlüsselspalten für die
DataTable
.Wenn keine Primärschlüsselspalten zurückgegeben werden, aber eindeutige Spalten sind, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn, und nur dann, wenn alle eindeutigen Spalten nicht ullierbar sind. Wenn eine der Spalten nullfähig ist, wird eine UniqueConstraint der ConstraintCollectionSpalten hinzugefügt, die Eigenschaft wird jedoch
PrimaryKey
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 die
DataTable
.
Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen den vorherigen Regeln hinzugefügt ConstraintCollection werden, andere Einschränkungstypen werden jedoch nicht hinzugefügt. Dieser Vorgang erfordert möglicherweise mehrere Roundtrips an den 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 wird, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder 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 die DbDataAdapter doppelten Spalten beim Auffüllen einer DataTableSpalte auftreten, generiert sie Namen für die nachfolgenden Spalten, wobei das Muster "columnname1", "columnname2", "columnname3" usw. verwendet wird. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn dem einzelnen Resultset mehrere Ergebnissätze hinzugefügt DataSet werden, wird in einer separaten Tabelle platziert. Zusätzliche Ergebnissätze werden durch Anfügen von integralen Werten an den angegebenen Tabellennamen benannt (z. B. "Tabelle", "Tabelle1", "Tabelle2" 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 DataTable.
Hinweis
Beim Behandeln von Batch-SQL-Anweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung FillSchema für die .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Verwenden Sie Fill zum Abrufen von Schemainformationen für mehrere Ergebnisse den MissingSchemaAction Satz 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).
Siehe auch
Gilt für:
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.
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
- 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 Schema zu füllen und eine 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
Hinweise
Diese Methode ruft die Schemainformationen aus der Datenquelle mithilfe der SelectCommand.
Ein Vorgang fügt dem Ziel DataSetein FillSchema DataTable. Anschließend wird den folgenden Eigenschaften Spalten DataColumnCollection DataTablehinzugefügt und die folgenden DataColumn Eigenschaften konfiguriert, wenn sie in der Datenquelle vorhanden sind:
AutoIncrement. Sie müssen festlegen und AutoIncrementSeed separat festlegenAutoIncrementStep.
FillSchemakonfiguriert auch die und Constraints die PrimaryKey Eigenschaften gemäß den folgenden Regeln:
Wenn eine oder mehrere Primärschlüsselspalten von der SelectCommandzurückgegeben werden, werden sie als Primärschlüsselspalten für die DataTable.
Wenn keine Primärschlüsselspalten zurückgegeben werden, aber eindeutige Spalten vorhanden sind, werden die eindeutigen Spalten als Primärschlüssel verwendet, wenn, und nur dann, wenn alle eindeutigen Spalten nicht ullierbar sind. Wenn eine der Spalten nullfähig ist, wird eine UniqueConstraint PrimaryKey der Spalten hinzugefügtConstraintCollection, die Eigenschaft wird jedoch 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 die DataTablezurückgegeben.
Beachten Sie, dass Primärschlüssel und eindeutige Einschränkungen den vorherigen Regeln hinzugefügt ConstraintCollection werden, aber andere Einschränkungstypen werden nicht hinzugefügt.
Wenn ein eindeutiger gruppierter Index in einer Spalte oder Spalten in einer SQL Server Tabelle definiert ist und die Primärschlüsseleinschränkung auf einer separaten Gruppe von Spalten definiert wird, werden die Namen der Spalten im gruppierten Index zurückgegeben. Um den Namen oder namen der Primärschlüsselspalten zurückzugeben, verwenden Sie einen Abfragehinweis mit der SELECT-Anweisung, die den Namen des Primärschlüsselindexs angibt. Weitere Informationen zum Angeben von Abfragehinweisen finden Sie unter Hints (Transact-SQL) – Abfrage.
Primärschlüsselinformationen werden während Fill des Suchens und Ersetzens von Zeilen verwendet, deren Schlüsselspalten übereinstimmen. Wenn dies nicht das gewünschte Verhalten ist, verwenden Sie Fill ohne Anfordern von Schemainformationen.
Wenn die IDataAdapter doppelten Spalten beim Auffüllen einer DataTableSpalte auftreten, generiert sie Namen für die nachfolgenden Spalten, mit dem Muster "columnname1", "columnname2", "columnname3" usw. Wenn die eingehenden Daten unbenannte Spalten enthalten, werden sie platziert, der DataSet gemäß dem Muster "Column1", "Column2" usw. Wenn mehrere Ergebnissätze dem DataSet einzelnen Ergebnissatz hinzugefügt werden, wird in einer separaten Tabelle platziert. Zusätzliche Ergebnissätze werden durch Anfügen von integralen Werten an den angegebenen Tabellennamen (z. B. "Table", "Table1", "Table2" usw.) benannt. Wenn Ihre App Spalten- und Tabellennamen verwendet, stellen Sie sicher, dass es keine Konflikte mit diesen Benennungsmustern gibt.
Das IDbConnection objekt, das dem Auswahlbefehl zugeordnet ist, muss gültig sein, muss aber nicht geöffnet werden. Wenn dies IDbConnection vor FillSchema dem Aufruf geschlossen wird, wird sie geöffnet, um Daten abzurufen, und dann geschlossen. Wenn die Verbindung vor dem Aufruf geöffnet ist, wird sie geöffnet FillSchema .
Hinweis
Beim Behandeln von Batch- SQL Anweisungen, die mehrere Ergebnisse zurückgeben, ruft die Implementierung FillSchema für die .NET Framework Datenanbieter für OLE DB Schemainformationen nur für das erste Ergebnis ab. Verwenden Sie Fill zum Abrufen von Schemainformationen für mehrere Ergebnisse den MissingSchemaAction Satz 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).