DbDataAdapter.FillSchema Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Ö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
- 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:
AutoIncrement. Du måste ange AutoIncrementStep och AutoIncrementSeed separat.
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
- 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:
AutoIncrement. Du måste ange AutoIncrementStep och AutoIncrementSeed separat.
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
- 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:
AutoIncrement. Du måste ange AutoIncrementStep och AutoIncrementSeed separat.
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
- 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:
AutoIncrement. Du måste ange AutoIncrementStep och AutoIncrementSeed separat.
FillSchema konfigurerar PrimaryKey också egenskaperna och Constraints enligt följande regler:
Om en PrimaryKey redan har definierats för
DataTable, ellerDataTableinnehåller data,PrimaryKeyanges 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
PrimaryKeyhar 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
- 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:
AutoIncrement. Du måste ange AutoIncrementStep och AutoIncrementSeed separat.
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).