DbDataAdapter.FillSchema Metod

Definition

Lägger till en DataTable i en DataSet och konfigurerar schemat så att det matchar det i datakällan.

Överlagringar

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

Lägger till en DataTable i den angivna DataSet och konfigurerar schemat så att det matchar det i datakällan baserat på den angivna SchemaType.

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Konfigurerar schemat för det angivna DataTable baserat på angiven SchemaType, kommandosträng och CommandBehavior värden.

FillSchema(DataSet, SchemaType, String)

Lägger till en DataTable i den angivna DataSet och konfigurerar schemat så att det matchar det i datakällan baserat på angivet SchemaType och DataTable.

FillSchema(DataTable, SchemaType)

Konfigurerar schemat för det angivna DataTable baserat på den angivna SchemaType.

FillSchema(DataSet, SchemaType)

Lägger till en DataTable "tabell" i den angivna DataSet och konfigurerar schemat så att det matchar det i datakällan baserat på den angivna SchemaType.

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

Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs

Lägger till en DataTable i den angivna DataSet och konfigurerar schemat så att det matchar det i datakällan baserat på den angivna SchemaType.

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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")]
protected virtual System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, System.Data.IDbCommand command, 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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * System.Data.IDbCommand * string * System.Data.CommandBehavior -> System.Data.DataTable[]
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()

Parametrar

dataSet
DataSet

Som DataSet ska fyllas med schemat från datakällan.

schemaType
SchemaType

Ett av SchemaType värdena.

command
IDbCommand

SQL SELECT-instruktionen som används för att hämta rader från datakällan.

srcTable
String

Namnet på källtabellen som ska användas för tabellmappning.

behavior
CommandBehavior

Ett av CommandBehavior värdena.

Returer

En matris med DataTable objekt som innehåller schemainformation som returneras från datakällan.

Attribut

Kommentarer

Metoden FillSchema hämtar schemat från datakällan med hjälp av SelectCommand. Anslutningsobjektet som är associerat med SelectCommand måste vara giltigt, men det behöver inte vara öppet. Om anslutningen stängs innan FillSchema anropas öppnas den för att hämta data och stängs sedan. Om anslutningen är öppen innan FillSchema anropas förblir den öppen.

En FillSchema åtgärd lägger till en DataTable i målet DataSet. Sedan läggs kolumner till i DataColumnCollectionDataTableoch konfigurerar följande DataColumn egenskaper om de finns i datakällan:

FillSchema konfigurerar PrimaryKey också egenskaperna och Constraints enligt följande regler:

  • Om en eller flera primärnyckelkolumner returneras av SelectCommandanvänds de som primärnyckelkolumner för DataTable.

  • Om inga primärnyckelkolumner returneras men unika kolumner är, används de unika kolumnerna som primärnyckel om, och endast om, alla unika kolumner inte kan inulleras. Om någon av kolumnerna kan vara null läggs en UniqueConstraint till i ConstraintCollection, men egenskapen PrimaryKey har inte angetts.

  • Om både primärnyckelkolumner och unika kolumner returneras används primärnyckelkolumnerna som primärnyckelkolumner för DataTable.

Observera att primära nycklar och unika begränsningar läggs till ConstraintCollection enligt föregående regler, men andra villkorstyper läggs inte till.

Om ett unikt grupperat index definieras för en kolumn eller kolumner i en SQL Server tabell och den primära nyckelbegränsningen definieras för en separat uppsättning kolumner, returneras namnen på kolumnerna i det klustrade indexet. Om du vill returnera namnet eller namnen på primärnyckelkolumnerna använder du ett frågetips med SELECT-instruktionen som anger namnet på primärnyckelindexet. Mer information om hur du anger frågetips finns i Hints (Transact-SQL) – Query.

Om det IDataAdapter uppstår dubbletter av kolumner när du fyller i en DataTablegenereras namn för efterföljande kolumner med hjälp av mönstret "columnname1", "columnname2", "columnname3" och så vidare. Om inkommande data innehåller icke namngivna kolumner placeras de i DataSet enligt mönstret "Column1", "Column2" och så vidare. När flera resultatuppsättningar läggs till i varje DataSet resultatuppsättning placeras i en separat tabell. Ytterligare resultatuppsättningar namnges genom att integralvärden läggs till i det angivna tabellnamnet (till exempel "Tabell", "Table1", "Table2" och så vidare.). Om din app använder kolumn- och tabellnamn kontrollerar du att det inte finns några konflikter med dessa namngivningsmönster.

Metoden FillSchema stöder scenarier där DataSet innehåller flera DataTable objekt vars namn endast skiljer sig åt från fall till fall. I sådana situationer FillSchema utför du en skiftlägeskänslig jämförelse för att hitta motsvarande tabell och skapar en ny tabell om det inte finns någon exakt matchning. Följande C#-kod illustrerar det här beteendet.

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

Om FillSchema anropas och DataSet innehåller endast en DataTable vars namn endast skiljer sig åt från fall till fall uppdateras det DataTable . I det här scenariot är jämförelsen skiftlägesokänslig. Följande C#-kod illustrerar det här beteendet.

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 returnerar inga rader. Fill Använd metoden för att lägga till rader i en DataTable.

Note

När du hanterar batch-SQL-instruktioner som returnerar flera resultat hämtar implementeringen av FillSchema för .NET Framework-Data Provider för OLE DB schemainformation för endast det första resultatet. Om du vill hämta schemainformation för flera resultat använder du Fill med inställningen MissingSchemaAction till AddWithKey.

När du använder FillSchema lägger .NET Framework Data Provider för SQL Server till en FOR BROWSE-sats i instruktionen som körs. Användaren bör vara medveten om potentiella biverkningar, till exempel interferens med användningen av SET FMTONLY ON-instruktioner. Mer information finns i SET FMTONLY (Transact-SQL).

Anteckningar till arvingar

Den här implementeringen av metoden FillSchema(DataSet, SchemaType) är skyddad och är utformad för användning av en .NET Framework-dataprovider.

Se även

Gäller för

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs

Konfigurerar schemat för det angivna DataTable baserat på angiven SchemaType, kommandosträng och CommandBehavior värden.

protected:
 virtual System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")]
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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType * System.Data.IDbCommand * System.Data.CommandBehavior -> System.Data.DataTable
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

Parametrar

dataTable
DataTable

Som DataTable ska fyllas med schemat från datakällan.

schemaType
SchemaType

Ett av SchemaType värdena.

command
IDbCommand

SQL SELECT-instruktionen som används för att hämta rader från datakällan.

behavior
CommandBehavior

Ett av CommandBehavior värdena.

Returer

Ett objekt DataTable som innehåller schemainformation som returneras från datakällan.

Attribut

Kommentarer

Metoden FillSchema hämtar schemat från datakällan med hjälp av SelectCommand. Anslutningsobjektet som är associerat med SelectCommand måste vara giltigt, men det behöver inte vara öppet. Om anslutningen stängs innan FillSchema anropas öppnas den för att hämta data och stängs sedan. Om anslutningen är öppen innan FillSchema anropas förblir den öppen.

En FillSchema åtgärd lägger till en DataTable i målet DataSet. Sedan läggs kolumner till i DataColumnCollectionDataTableoch konfigurerar följande DataColumn egenskaper om de finns i datakällan:

FillSchema konfigurerar PrimaryKey också egenskaperna och Constraints enligt följande regler:

  • Om en eller flera primärnyckelkolumner returneras av SelectCommandanvänds de som primärnyckelkolumner för DataTable.

  • Om inga primärnyckelkolumner returneras men unika kolumner är, används de unika kolumnerna som primärnyckel om, och endast om, alla unika kolumner inte kan inulleras. Om någon av kolumnerna kan vara null läggs en UniqueConstraint till i ConstraintCollection, men egenskapen PrimaryKey har inte angetts.

  • Om både primärnyckelkolumner och unika kolumner returneras används primärnyckelkolumnerna som primärnyckelkolumner för DataTable.

Observera att primära nycklar och unika begränsningar läggs till ConstraintCollection enligt föregående regler, men andra villkorstyper läggs inte till.

Om ett unikt grupperat index definieras för en kolumn eller kolumner i en SQL Server tabell och den primära nyckelbegränsningen definieras för en separat uppsättning kolumner, returneras namnen på kolumnerna i det klustrade indexet. Om du vill returnera namnet eller namnen på primärnyckelkolumnerna använder du ett frågetips med SELECT-instruktionen som anger namnet på primärnyckelindexet. Mer information om hur du anger frågetips finns i Hints (Transact-SQL) – Query.

Om det IDataAdapter uppstår dubbletter av kolumner när du fyller i en DataTablegenereras namn för efterföljande kolumner med hjälp av mönstret "columnname1", "columnname2", "columnname3" och så vidare. Om inkommande data innehåller icke namngivna kolumner placeras de i DataSet enligt mönstret "Column1", "Column2" och så vidare. När flera resultatuppsättningar läggs till i varje DataSet resultatuppsättning placeras i en separat tabell. Ytterligare resultatuppsättningar namnges genom att integralvärden läggs till i det angivna tabellnamnet (till exempel "Tabell", "Table1", "Table2" och så vidare.). Om din app använder kolumn- och tabellnamn kontrollerar du att det inte finns några konflikter med dessa namngivningsmönster.

FillSchema returnerar inga rader. Fill Använd metoden för att lägga till rader i en DataTable.

Note

När du hanterar batch-SQL-instruktioner som returnerar flera resultat hämtar implementeringen av FillSchema för .NET Framework-Data Provider för OLE DB schemainformation för endast det första resultatet. Om du vill hämta schemainformation för flera resultat använder du Fill med inställningen MissingSchemaAction till AddWithKey.

När du använder FillSchema lägger .NET Framework Data Provider för SQL Server till en FOR BROWSE-sats i instruktionen som körs. Användaren bör vara medveten om potentiella biverkningar, till exempel interferens med användningen av SET FMTONLY ON-instruktioner. Mer information finns i SET FMTONLY (Transact-SQL).

Anteckningar till arvingar

Den här implementeringen av metoden FillSchema(DataSet, SchemaType) är skyddad och är utformad för användning av en .NET Framework-dataprovider.

Se även

Gäller för

FillSchema(DataSet, SchemaType, String)

Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs

Lägger till en DataTable i den angivna DataSet och konfigurerar schemat så att det matchar det i datakällan baserat på angivet SchemaType och DataTable.

public:
 cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::String ^ srcTable);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
public System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * string -> System.Data.DataTable[]
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()

Parametrar

dataSet
DataSet

A DataSet för att infoga schemat i.

schemaType
SchemaType

Ett av de SchemaType värden som anger hur schemat ska infogas.

srcTable
String

Namnet på källtabellen som ska användas för tabellmappning.

Returer

En referens till en samling DataTable objekt som har lagts till i DataSet.

Attribut

Undantag

Det gick inte att hitta en källtabell som schemat ska hämtas från.

Exempel

I följande exempel används den härledda klassen, , SqlDataAdapterför att fylla en DataSet med schemat och returnerar en 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

Kommentarer

Den här metoden hämtar schemainformationen från datakällan med hjälp av SelectCommand.

En FillSchema åtgärd lägger till en DataTable i målet DataSet. Sedan läggs kolumner till i DataColumnCollectionDataTableoch konfigurerar följande DataColumn egenskaper om de finns i datakällan:

FillSchema konfigurerar PrimaryKey också egenskaperna och Constraints enligt följande regler:

  • Om en eller flera primärnyckelkolumner returneras av SelectCommandanvänds de som primärnyckelkolumner för DataTable.

  • Om inga primärnyckelkolumner returneras men unika kolumner är, används de unika kolumnerna som primärnyckel om, och endast om, alla unika kolumner inte kan inulleras. Om någon av kolumnerna kan vara null läggs en UniqueConstraint till i ConstraintCollection, men egenskapen PrimaryKey har inte angetts.

  • Om både primärnyckelkolumner och unika kolumner returneras används primärnyckelkolumnerna som primärnyckelkolumner för DataTable.

Observera att primära nycklar och unika begränsningar läggs till ConstraintCollection enligt föregående regler, men andra villkorstyper läggs inte till.

Om ett unikt grupperat index definieras för en kolumn eller kolumner i en SQL Server tabell och den primära nyckelbegränsningen definieras för en separat uppsättning kolumner, returneras namnen på kolumnerna i det klustrade indexet. Om du vill returnera namnet eller namnen på primärnyckelkolumnerna använder du ett frågetips med SELECT-instruktionen som anger namnet på primärnyckelindexet. Mer information om hur du anger frågetips finns i Hints (Transact-SQL) – Query.

Primärnyckelinformation används under Fill för att hitta och ersätta alla rader vars nyckelkolumner matchar. Om detta inte är det önskade beteendet använder du Fill utan att begära schemainformation.

Om det DbDataAdapter uppstår dubbletter av kolumner när du fyller i en DataTablegenereras namn för efterföljande kolumner med hjälp av mönstret "columnname1", "columnname2", "columnname3" och så vidare. Om inkommande data innehåller icke namngivna kolumner placeras de i DataSet enligt mönstret "Column1", "Column2" och så vidare. När flera resultatuppsättningar läggs till i varje DataSet resultatuppsättning placeras i en separat tabell. Ytterligare resultatuppsättningar namnges genom att integralvärden läggs till i det angivna tabellnamnet (till exempel "Tabell", "Table1", "Table2" och så vidare.). Om din app använder kolumn- och tabellnamn kontrollerar du att det inte finns några konflikter med dessa namngivningsmönster.

Metoden FillSchema stöder scenarier där DataSet innehåller flera DataTable objekt vars namn endast skiljer sig åt från fall till fall. I sådana situationer FillSchema utför du en skiftlägeskänslig jämförelse för att hitta motsvarande tabell och skapar en ny tabell om det inte finns någon exakt matchning. Följande C#-kod illustrerar det här beteendet.

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

Om FillSchema anropas och DataSet innehåller endast en DataTable vars namn endast skiljer sig åt från fall till fall uppdateras det DataTable . I det här scenariot är jämförelsen skiftlägesokänslig. Följande C#-kod illustrerar det här beteendet.

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.

Objektet IDbConnection som är associerat med kommandot select måste vara giltigt, men det behöver inte öppnas. IDbConnection Om är stängd innan FillSchema anropas öppnas den för att hämta data och stängs sedan. Om anslutningen är öppen innan FillSchema anropas lämnas den öppen.

Note

När du hanterar batch-SQL-instruktioner som returnerar flera resultat hämtar implementeringen av FillSchema för .NET Framework-Data Provider för OLE DB schemainformation för endast det första resultatet. Om du vill hämta schemainformation för flera resultat använder du Fill med inställningen MissingSchemaAction till AddWithKey.

När du använder FillSchema lägger .NET Framework Data Provider för SQL Server till en FOR BROWSE-sats i instruktionen som körs. Användaren bör vara medveten om potentiella biverkningar, till exempel interferens med användningen av SET FMTONLY ON-instruktioner. Mer information finns i SET FMTONLY (Transact-SQL).

Se även

Gäller för

FillSchema(DataTable, SchemaType)

Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs

Konfigurerar schemat för det angivna DataTable baserat på den angivna SchemaType.

public:
 System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
Public Function FillSchema (dataTable As DataTable, schemaType As SchemaType) As DataTable

Parametrar

dataTable
DataTable

Som DataTable ska fyllas med schemat från datakällan.

schemaType
SchemaType

Ett av SchemaType värdena.

Returer

En DataTable som innehåller schemainformation som returneras från datakällan.

Attribut

Exempel

I följande exempel används den härledda klassen, , SqlDataAdapterför att fylla en DataSet med schemat och returnerar en 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

Kommentarer

Metoden FillSchema hämtar schemat från datakällan med hjälp av SelectCommand. Anslutningsobjektet som är associerat med SelectCommand måste vara giltigt, men det behöver inte vara öppet. Om anslutningen stängs innan FillSchema anropas öppnas den för att hämta data och stängs sedan. Om anslutningen är öppen innan FillSchema anropas förblir den öppen.

En FillSchema åtgärd returnerar en DataTable. Sedan läggs kolumner till i DataColumnCollectionDataTableoch konfigurerar följande DataColumn egenskaper om de finns i datakällan:

FillSchema konfigurerar PrimaryKey också egenskaperna och Constraints enligt följande regler:

  • Om en PrimaryKey redan har definierats för DataTable, eller DataTable innehåller data, PrimaryKey anges inte egenskapen.

  • Om en eller flera primärnyckelkolumner returneras av SelectCommandanvänds de som primärnyckelkolumner för DataTable.

  • Om inga primärnyckelkolumner returneras men unika kolumner är, används de unika kolumnerna som primärnyckel om, och endast om, alla unika kolumner inte kan inulleras. Om någon av kolumnerna kan vara null läggs en UniqueConstraint till i ConstraintCollection, men egenskapen PrimaryKey har inte angetts.

  • Om både primärnyckelkolumner och unika kolumner returneras används primärnyckelkolumnerna som primärnyckelkolumner för DataTable.

Observera att primära nycklar och unika begränsningar läggs till ConstraintCollection enligt föregående regler, men andra villkorstyper läggs inte till. Den här processen kan kräva flera turer till servern.

Om ett unikt grupperat index definieras för en kolumn eller kolumner i en SQL Server tabell och den primära nyckelbegränsningen definieras för en separat uppsättning kolumner, returneras namnen på kolumnerna i det klustrade indexet. Om du vill returnera namnet eller namnen på primärnyckelkolumnerna använder du ett frågetips med SELECT-instruktionen som anger namnet på primärnyckelindexet. Mer information om hur du anger frågetips finns i Hints (Transact-SQL) – Query.

Om det DbDataAdapter uppstår dubbletter av kolumner när du fyller i en DataTablegenereras namn för efterföljande kolumner med hjälp av mönstret "columnname1", "columnname2", "columnname3" och så vidare. Om inkommande data innehåller icke namngivna kolumner placeras de i DataSet enligt mönstret "Column1", "Column2" och så vidare. När flera resultatuppsättningar läggs till i varje DataSet resultatuppsättning placeras i en separat tabell. Ytterligare resultatuppsättningar namnges genom att integralvärden läggs till i det angivna tabellnamnet (till exempel "Tabell", "Table1", "Table2" och så vidare.). Om din app använder kolumn- och tabellnamn kontrollerar du att det inte finns några konflikter med dessa namngivningsmönster.

FillSchema returnerar inga rader. Fill Använd metoden för att lägga till rader i en DataTable.

Note

När du hanterar batch-SQL-instruktioner som returnerar flera resultat hämtar implementeringen av FillSchema för .NET Framework-Data Provider för OLE DB schemainformation för endast det första resultatet. Om du vill hämta schemainformation för flera resultat använder du Fill med inställningen MissingSchemaAction till AddWithKey.

När du använder FillSchema lägger .NET Framework Data Provider för SQL Server till en FOR BROWSE-sats i instruktionen som körs. Användaren bör vara medveten om potentiella biverkningar, till exempel interferens med användningen av SET FMTONLY ON-instruktioner. Mer information finns i SET FMTONLY (Transact-SQL).

Se även

Gäller för

FillSchema(DataSet, SchemaType)

Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs
Källa:
DbDataAdapter.cs

Lägger till en DataTable "tabell" i den angivna DataSet och konfigurerar schemat så att det matchar det i datakällan baserat på den angivna SchemaType.

public:
 override cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public override 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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
Public Overrides Function FillSchema (dataSet As DataSet, schemaType As SchemaType) As DataTable()

Parametrar

dataSet
DataSet

A DataSet för att infoga schemat i.

schemaType
SchemaType

Ett av de SchemaType värden som anger hur schemat ska infogas.

Returer

En referens till en samling DataTable objekt som har lagts till i DataSet.

Implementeringar

Attribut

Exempel

I följande exempel används den härledda klassen, , SqlDataAdapterför att fylla en DataSet med schemat och returnerar en 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

Kommentarer

Den här metoden hämtar schemainformationen från datakällan med hjälp av SelectCommand.

En FillSchema åtgärd lägger till en DataTable i målet DataSet. Sedan läggs kolumner till i DataColumnCollectionDataTableoch konfigurerar följande DataColumn egenskaper om de finns i datakällan:

FillSchema konfigurerar PrimaryKey också egenskaperna och Constraints enligt följande regler:

  • Om en eller flera primärnyckelkolumner returneras av SelectCommandanvänds de som primärnyckelkolumner för DataTable.

  • Om inga primärnyckelkolumner returneras men unika kolumner är, används de unika kolumnerna som primärnyckel om, och endast om, alla unika kolumner inte kan inulleras. Om någon av kolumnerna kan vara null läggs en UniqueConstraint till i ConstraintCollection, men egenskapen PrimaryKey har inte angetts.

  • Om både primärnyckelkolumner och unika kolumner returneras används primärnyckelkolumnerna som primärnyckelkolumner för DataTable.

Observera att primära nycklar och unika begränsningar läggs till ConstraintCollection enligt föregående regler, men andra villkorstyper läggs inte till.

Om ett unikt grupperat index definieras för en kolumn eller kolumner i en SQL Server tabell och den primära nyckelbegränsningen definieras för en separat uppsättning kolumner, returneras namnen på kolumnerna i det klustrade indexet. Om du vill returnera namnet eller namnen på primärnyckelkolumnerna använder du ett frågetips med SELECT-instruktionen som anger namnet på primärnyckelindexet. Mer information om hur du anger frågetips finns i Hints (Transact-SQL) – Query.

Primärnyckelinformation används under Fill för att hitta och ersätta alla rader vars nyckelkolumner matchar. Om detta inte är det önskade beteendet använder du Fill utan att begära schemainformation.

Om det IDataAdapter uppstår dubbletter av kolumner när du fyller i en DataTablegenereras namn för efterföljande kolumner med hjälp av mönstret "columnname1", "columnname2", "columnname3" och så vidare. Om inkommande data innehåller icke namngivna kolumner placeras de i DataSet enligt mönstret "Column1", "Column2" och så vidare. När flera resultatuppsättningar läggs till i varje DataSet resultatuppsättning placeras i en separat tabell. Ytterligare resultatuppsättningar namnges genom att integralvärden läggs till i det angivna tabellnamnet (till exempel "Tabell", "Table1", "Table2" och så vidare.). Om din app använder kolumn- och tabellnamn kontrollerar du att det inte finns några konflikter med dessa namngivningsmönster.

Objektet IDbConnection som är associerat med kommandot select måste vara giltigt, men det behöver inte öppnas. IDbConnection Om är stängd innan FillSchema anropas öppnas den för att hämta data och stängs sedan. Om anslutningen är öppen innan FillSchema anropas lämnas den öppen.

Note

När du hanterar batch-SQL-instruktioner som returnerar flera resultat hämtar implementeringen av FillSchema för .NET Framework-Data Provider för OLE DB schemainformation för endast det första resultatet. Om du vill hämta schemainformation för flera resultat använder du Fill med inställningen MissingSchemaAction till AddWithKey.

När du använder FillSchema lägger .NET Framework Data Provider för SQL Server till en FOR BROWSE-sats i instruktionen som körs. Användaren bör vara medveten om potentiella biverkningar, till exempel interferens med användningen av SET FMTONLY ON-instruktioner. Mer information finns i SET FMTONLY (Transact-SQL).

Se även

Gäller för