Udostępnij za pośrednictwem


DbDataAdapter.FillSchema Metoda

Definicja

Dodaje element DataTable do elementu DataSet i konfiguruje schemat, aby był zgodny z tym w źródle danych.

Przeciążenia

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

DataTable Dodaje element do określonego DataSet elementu i konfiguruje schemat tak, aby był zgodny z tym w źródle danych na podstawie określonego SchemaTypeelementu .

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Konfiguruje schemat określonego DataTable elementu na podstawie określonego SchemaType, ciągu polecenia i CommandBehavior wartości.

FillSchema(DataSet, SchemaType, String)

DataTable Dodaje element do określonego DataSet elementu i konfiguruje schemat tak, aby był zgodny z tym w źródle danych na podstawie określonych SchemaType wartości i DataTable.

FillSchema(DataTable, SchemaType)

Konfiguruje schemat określonego DataTable elementu na podstawie określonego SchemaTypeelementu .

FillSchema(DataSet, SchemaType)

DataTable Dodaje nazwę "Tabela" do określonego DataSet i konfiguruje schemat w taki sposób, aby był zgodny z tym w źródle danych na podstawie określonego SchemaTypeelementu .

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

Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs

DataTable Dodaje element do określonego DataSet elementu i konfiguruje schemat tak, aby był zgodny z tym w źródle danych na podstawie określonego SchemaTypeelementu .

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

Parametry

dataSet
DataSet

Obiekt DataSet , który ma zostać wypełniony schematem ze źródła danych.

schemaType
SchemaType

SchemaType Jedna z wartości.

command
IDbCommand

Instrukcja SQL SELECT używana do pobierania wierszy ze źródła danych.

srcTable
String

Nazwa tabeli źródłowej do użycia na potrzeby mapowania tabel.

behavior
CommandBehavior

CommandBehavior Jedna z wartości.

Zwraca

Tablica DataTable obiektów, które zawierają informacje o schemacie zwrócone ze źródła danych.

Uwagi

Metoda FillSchema pobiera schemat ze źródła danych przy użyciu elementu SelectCommand. Obiekt połączenia skojarzony z obiektem SelectCommand musi być prawidłowy, ale nie musi być otwarty. Jeśli połączenie zostanie zamknięte przed FillSchema wywołaniem, zostanie otwarte w celu pobrania danych, a następnie zamknięte. Jeśli połączenie jest otwarte przed FillSchema wywołaniem, pozostaje otwarte.

Operacja FillSchema dodaje obiekt DataTable do lokalizacji docelowej DataSet. Następnie dodaje kolumny do DataColumnCollection elementu DataTablei konfiguruje następujące DataColumn właściwości, jeśli istnieją w źródle danych:

FillSchema Konfiguruje PrimaryKey również właściwości i Constraints zgodnie z następującymi regułami:

  • Jeśli co najmniej jedna kolumna klucza podstawowego SelectCommandjest zwracana przez element , są one używane jako kolumny klucza podstawowego dla elementu DataTable.

  • Jeśli nie są zwracane żadne kolumny klucza podstawowego, ale są to kolumny unikatowe, są używane jako klucz podstawowy, jeśli i tylko wtedy, gdy wszystkie unikatowe kolumny nie są możliwe. Jeśli którakolwiek z kolumn ma wartość null, element UniqueConstraint zostanie dodany do ConstraintCollectionobiektu , ale właściwość nie jest ustawiona PrimaryKey .

  • Jeśli zostaną zwrócone zarówno kolumny klucza podstawowego, jak i kolumny unikatowe, kolumny klucza podstawowego są używane jako kolumny klucza podstawowego dla elementu DataTable.

Należy pamiętać, że klucze podstawowe i unikatowe ograniczenia są dodawane zgodnie ConstraintCollection z poprzednimi regułami, ale nie są dodawane inne typy ograniczeń.

Jeśli unikatowy indeks grupowany jest zdefiniowany w kolumnie lub kolumnach w tabeli SQL Server, a ograniczenie klucza podstawowego jest definiowane w oddzielnym zestawie kolumn, zwracane będą nazwy kolumn w indeksie klastrowanym. Aby zwrócić nazwę lub nazwy kolumn klucza podstawowego, użyj wskazówki dotyczącej zapytania z instrukcją SELECT, która określa nazwę indeksu klucza podstawowego. Aby uzyskać więcej informacji na temat określania wskazówek dotyczących zapytań, zobacz Wskazówki (Transact-SQL) — zapytanie.

Jeśli napotka IDataAdapter zduplikowane kolumny podczas wypełniania DataTableelementu , generuje nazwy dla kolejnych kolumn przy użyciu wzorca "nazwakolumny1", "nazwa_kolumny2", "nazwa_kolumny3" itd. Jeśli dane przychodzące zawierają nienazwane kolumny, są one umieszczane w DataSet zależności od wzorca "Column1", "Column2" itd. Gdy do każdego zestawu wyników jest dodawanych wiele zestawów wyników, należy umieścić DataSet w oddzielnej tabeli. Dodatkowe zestawy wyników są nazwane przez dołączenie wartości całkowitych do określonej nazwy tabeli (na przykład "Tabela", "Tabela1", "Tabela2" itd.). Jeśli aplikacja używa nazw kolumn i tabel, upewnij się, że nie występują konflikty z tymi wzorcami nazewnictwa.

Metoda FillSchema obsługuje scenariusze, w których DataSet obiekt zawiera wiele DataTable obiektów, których nazwy różnią się tylko wielkością liter. W takich sytuacjach wykonuje porównanie uwzględniające wielkość liter, aby znaleźć odpowiednią tabelę, i tworzy nową tabelę, FillSchema jeśli nie istnieje dokładne dopasowanie. Poniższy kod w języku C# ilustruje to zachowanie.

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

Jeśli FillSchema jest wywoływana DataSet i zawiera tylko jedną DataTable , której nazwa różni się tylko wielkością liter, DataTable jest to aktualizowane. W tym scenariuszu porównanie nie uwzględnia wielkości liter. Poniższy kod w języku C# ilustruje to zachowanie.

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 nie zwraca żadnych wierszy. Fill Użyj metody , aby dodać wiersze do klasy DataTable.

Uwaga

W przypadku obsługi instrukcji sql wsadowych, które zwracają wiele wyników, implementacja FillSchema dostawcy danych .NET Framework dla OLE DB pobiera informacje o schemacie tylko dla pierwszego wyniku. Aby pobrać informacje o schemacie dla wielu wyników, użyj polecenia Fill z zestawem MissingSchemaAction na wartość AddWithKey.

W przypadku korzystania z programu FillSchemadostawca danych .NET Framework dla SQL Server dołącza klauzulę FOR BROWSE do wykonywanej instrukcji. Użytkownik powinien mieć świadomość potencjalnych skutków ubocznych, takich jak ingerencja w stosowanie instrukcji SET FMTONLY ON. Aby uzyskać więcej informacji, zobacz SET FMTONLY (Transact-SQL).

Uwagi dotyczące dziedziczenia

Ta implementacja FillSchema(DataSet, SchemaType) metody jest chroniona i jest przeznaczona do użycia przez dostawcę danych .NET Framework.

Zobacz też

Dotyczy

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs

Konfiguruje schemat określonego DataTable elementu na podstawie określonego SchemaType, ciągu polecenia i CommandBehavior wartości.

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

Parametry

dataTable
DataTable

Obiekt DataTable , który ma zostać wypełniony schematem ze źródła danych.

schemaType
SchemaType

SchemaType Jedna z wartości.

command
IDbCommand

Instrukcja SQL SELECT używana do pobierania wierszy ze źródła danych.

behavior
CommandBehavior

CommandBehavior Jedna z wartości.

Zwraca

DataTable Obiekt zawierający informacje o schemacie zwrócone ze źródła danych.

Uwagi

Metoda FillSchema pobiera schemat ze źródła danych przy użyciu elementu SelectCommand. Obiekt połączenia skojarzony z obiektem SelectCommand musi być prawidłowy, ale nie musi być otwarty. Jeśli połączenie zostanie zamknięte przed FillSchema wywołaniem, zostanie otwarte w celu pobrania danych, a następnie zamknięte. Jeśli połączenie jest otwarte przed FillSchema wywołaniem, pozostaje otwarte.

Operacja FillSchema dodaje obiekt DataTable do lokalizacji docelowej DataSet. Następnie dodaje kolumny do DataColumnCollection elementu DataTablei konfiguruje następujące DataColumn właściwości, jeśli istnieją w źródle danych:

FillSchema Konfiguruje PrimaryKey również właściwości i Constraints zgodnie z następującymi regułami:

  • Jeśli co najmniej jedna kolumna klucza podstawowego SelectCommandjest zwracana przez element , są one używane jako kolumny klucza podstawowego dla elementu DataTable.

  • Jeśli nie są zwracane żadne kolumny klucza podstawowego, ale są to kolumny unikatowe, są używane jako klucz podstawowy, jeśli i tylko wtedy, gdy wszystkie unikatowe kolumny nie są możliwe. Jeśli którakolwiek z kolumn ma wartość null, element UniqueConstraint zostanie dodany do ConstraintCollectionobiektu , ale właściwość nie jest ustawiona PrimaryKey .

  • Jeśli zostaną zwrócone zarówno kolumny klucza podstawowego, jak i kolumny unikatowe, kolumny klucza podstawowego są używane jako kolumny klucza podstawowego dla elementu DataTable.

Należy pamiętać, że klucze podstawowe i unikatowe ograniczenia są dodawane zgodnie ConstraintCollection z poprzednimi regułami, ale nie są dodawane inne typy ograniczeń.

Jeśli unikatowy indeks grupowany jest zdefiniowany w kolumnie lub kolumnach w tabeli SQL Server, a ograniczenie klucza podstawowego jest definiowane w oddzielnym zestawie kolumn, zwracane będą nazwy kolumn w indeksie klastrowanym. Aby zwrócić nazwę lub nazwy kolumn klucza podstawowego, użyj wskazówki dotyczącej zapytania z instrukcją SELECT, która określa nazwę indeksu klucza podstawowego. Aby uzyskać więcej informacji na temat określania wskazówek dotyczących zapytań, zobacz Wskazówki (Transact-SQL) — zapytanie.

Jeśli napotka IDataAdapter zduplikowane kolumny podczas wypełniania DataTableelementu , generuje nazwy dla kolejnych kolumn przy użyciu wzorca "nazwakolumny1", "nazwa_kolumny2", "nazwa_kolumny3" itd. Jeśli dane przychodzące zawierają nienazwane kolumny, są one umieszczane w DataSet zależności od wzorca "Column1", "Column2" itd. Gdy do każdego zestawu wyników jest dodawanych wiele zestawów wyników, należy umieścić DataSet w oddzielnej tabeli. Dodatkowe zestawy wyników są nazwane przez dołączenie wartości całkowitych do określonej nazwy tabeli (na przykład "Tabela", "Tabela1", "Tabela2" itd.). Jeśli aplikacja używa nazw kolumn i tabel, upewnij się, że nie występują konflikty z tymi wzorcami nazewnictwa.

FillSchema nie zwraca żadnych wierszy. Fill Użyj metody , aby dodać wiersze do klasy DataTable.

Uwaga

W przypadku obsługi instrukcji sql wsadowych, które zwracają wiele wyników, implementacja FillSchema dostawcy danych .NET Framework dla OLE DB pobiera informacje o schemacie tylko dla pierwszego wyniku. Aby pobrać informacje o schemacie dla wielu wyników, użyj polecenia Fill z zestawem MissingSchemaAction na wartość AddWithKey.

W przypadku korzystania z programu FillSchemadostawca danych .NET Framework dla SQL Server dołącza klauzulę FOR BROWSE do wykonywanej instrukcji. Użytkownik powinien mieć świadomość potencjalnych skutków ubocznych, takich jak ingerencja w stosowanie instrukcji SET FMTONLY ON. Aby uzyskać więcej informacji, zobacz SET FMTONLY (Transact-SQL).

Uwagi dotyczące dziedziczenia

Ta implementacja FillSchema(DataSet, SchemaType) metody jest chroniona i jest przeznaczona do użycia przez dostawcę danych .NET Framework.

Zobacz też

Dotyczy

FillSchema(DataSet, SchemaType, String)

Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs

DataTable Dodaje element do określonego DataSet elementu i konfiguruje schemat tak, aby był zgodny z tym w źródle danych na podstawie określonych SchemaType wartości i DataTable.

public:
 cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::String ^ srcTable);
public System.Data.DataTable[] FillSchema (System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * string -> System.Data.DataTable[]
Public Function FillSchema (dataSet As DataSet, schemaType As SchemaType, srcTable As String) As DataTable()

Parametry

dataSet
DataSet

A DataSet do wstawienia schematu.

schemaType
SchemaType

SchemaType Jedna z wartości określających sposób wstawiania schematu.

srcTable
String

Nazwa tabeli źródłowej do użycia na potrzeby mapowania tabel.

Zwraca

Odwołanie do kolekcji DataTable obiektów, które zostały dodane do obiektu DataSet.

Wyjątki

Nie można odnaleźć tabeli źródłowej, z której można pobrać schemat.

Przykłady

W poniższym przykładzie użyto klasy pochodnej , SqlDataAdapter, aby wypełnić DataSet element schematem i zwrócić wartość 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

Uwagi

Ta metoda pobiera informacje o schemacie ze źródła danych przy użyciu elementu SelectCommand.

Operacja FillSchema dodaje obiekt DataTable do lokalizacji docelowej DataSet. Następnie dodaje kolumny do DataColumnCollection elementu DataTablei konfiguruje następujące DataColumn właściwości, jeśli istnieją w źródle danych:

FillSchema Konfiguruje PrimaryKey również właściwości i Constraints zgodnie z następującymi regułami:

  • Jeśli co najmniej jedna kolumna klucza podstawowego SelectCommandjest zwracana przez element , są one używane jako kolumny klucza podstawowego dla elementu DataTable.

  • Jeśli nie są zwracane żadne kolumny klucza podstawowego, ale są to kolumny unikatowe, są używane jako klucz podstawowy, jeśli i tylko wtedy, gdy wszystkie unikatowe kolumny nie są możliwe. Jeśli którakolwiek z kolumn ma wartość null, element UniqueConstraint zostanie dodany do ConstraintCollectionobiektu , ale właściwość nie jest ustawiona PrimaryKey .

  • Jeśli zostaną zwrócone zarówno kolumny klucza podstawowego, jak i kolumny unikatowe, kolumny klucza podstawowego są używane jako kolumny klucza podstawowego dla elementu DataTable.

Należy pamiętać, że klucze podstawowe i unikatowe ograniczenia są dodawane zgodnie ConstraintCollection z poprzednimi regułami, ale nie są dodawane inne typy ograniczeń.

Jeśli unikatowy indeks grupowany jest zdefiniowany w kolumnie lub kolumnach w tabeli SQL Server, a ograniczenie klucza podstawowego jest definiowane w oddzielnym zestawie kolumn, zwracane będą nazwy kolumn w indeksie klastrowanym. Aby zwrócić nazwę lub nazwy kolumn klucza podstawowego, użyj wskazówki dotyczącej zapytania z instrukcją SELECT, która określa nazwę indeksu klucza podstawowego. Aby uzyskać więcej informacji na temat określania wskazówek dotyczących zapytań, zobacz Wskazówki (Transact-SQL) — zapytanie.

Informacje o kluczu podstawowym są używane podczas Fill znajdowania i zastępowania wszystkich wierszy, których kolumny kluczy są zgodne. Jeśli nie jest to pożądane zachowanie, użyj polecenia Fill bez żądania informacji o schemacie.

Jeśli napotka DbDataAdapter zduplikowane kolumny podczas wypełniania DataTableelementu , generuje nazwy dla kolejnych kolumn przy użyciu wzorca "nazwakolumny1", "nazwa_kolumny2", "nazwa_kolumny3" itd. Jeśli dane przychodzące zawierają nienazwane kolumny, są one umieszczane w DataSet zależności od wzorca "Column1", "Column2" itd. Gdy do każdego zestawu wyników jest dodawanych wiele zestawów wyników, należy umieścić DataSet w oddzielnej tabeli. Dodatkowe zestawy wyników są nazwane przez dołączenie wartości całkowitych do określonej nazwy tabeli (na przykład "Tabela", "Tabela1", "Tabela2" itd.). Jeśli aplikacja używa nazw kolumn i tabel, upewnij się, że nie występują konflikty z tymi wzorcami nazewnictwa.

Metoda FillSchema obsługuje scenariusze, w których DataSet obiekt zawiera wiele DataTable obiektów, których nazwy różnią się tylko wielkością liter. W takich sytuacjach wykonuje porównanie uwzględniające wielkość liter, aby znaleźć odpowiednią tabelę, i tworzy nową tabelę, FillSchema jeśli nie istnieje dokładne dopasowanie. Poniższy kod w języku C# ilustruje to zachowanie.

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

Jeśli FillSchema jest wywoływana DataSet i zawiera tylko jedną DataTable , której nazwa różni się tylko wielkością liter, DataTable jest to aktualizowane. W tym scenariuszu porównanie nie uwzględnia wielkości liter. Poniższy kod w języku C# ilustruje to zachowanie.

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.  

Obiekt IDbConnection skojarzony z poleceniem select musi być prawidłowy, ale nie musi być otwarty. Jeśli element IDbConnection jest zamknięty przed FillSchema wywołaniem, zostanie otwarty w celu pobrania danych, a następnie zamknięty. Jeśli połączenie jest otwarte przed FillSchema wywołaniem, pozostaje otwarte.

Uwaga

W przypadku obsługi instrukcji sql wsadowych, które zwracają wiele wyników, implementacja FillSchema dostawcy danych .NET Framework dla OLE DB pobiera informacje o schemacie tylko dla pierwszego wyniku. Aby pobrać informacje o schemacie dla wielu wyników, użyj polecenia Fill z zestawem MissingSchemaAction na wartość AddWithKey.

W przypadku korzystania z programu FillSchemadostawca danych .NET Framework dla SQL Server dołącza klauzulę FOR BROWSE do wykonywanej instrukcji. Użytkownik powinien mieć świadomość potencjalnych skutków ubocznych, takich jak ingerencja w stosowanie instrukcji SET FMTONLY ON. Aby uzyskać więcej informacji, zobacz SET FMTONLY (Transact-SQL).

Zobacz też

Dotyczy

FillSchema(DataTable, SchemaType)

Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs

Konfiguruje schemat określonego DataTable elementu na podstawie określonego SchemaTypeelementu .

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

Parametry

dataTable
DataTable

Obiekt DataTable , który ma zostać wypełniony schematem ze źródła danych.

schemaType
SchemaType

SchemaType Jedna z wartości.

Zwraca

Element DataTable zawierający informacje o schemacie zwrócone ze źródła danych.

Przykłady

W poniższym przykładzie użyto klasy pochodnej , SqlDataAdapter, aby wypełnić DataSet element schematem i zwrócić wartość 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

Uwagi

Metoda FillSchema pobiera schemat ze źródła danych przy użyciu elementu SelectCommand. Obiekt połączenia skojarzony z obiektem SelectCommand musi być prawidłowy, ale nie musi być otwarty. Jeśli połączenie zostanie zamknięte przed FillSchema wywołaniem, zostanie otwarte w celu pobrania danych, a następnie zamknięte. Jeśli połączenie jest otwarte przed FillSchema wywołaniem, pozostaje otwarte.

Operacja FillSchema zwraca wartość DataTable. Następnie dodaje kolumny do DataColumnCollection elementu DataTablei konfiguruje następujące DataColumn właściwości, jeśli istnieją w źródle danych:

FillSchema Konfiguruje PrimaryKey również właściwości i Constraints zgodnie z następującymi regułami:

  • PrimaryKey Jeśli element został już zdefiniowany dla obiektu DataTablelub DataTable zawiera dane, właściwość nie zostanie ustawionaPrimaryKey.

  • Jeśli co najmniej jedna kolumna klucza podstawowego SelectCommandjest zwracana przez element , są one używane jako kolumny klucza podstawowego dla elementu DataTable.

  • Jeśli nie są zwracane żadne kolumny klucza podstawowego, ale są to kolumny unikatowe, są używane jako klucz podstawowy, jeśli i tylko wtedy, gdy wszystkie unikatowe kolumny nie są możliwe. Jeśli którakolwiek z kolumn ma wartość null, element UniqueConstraint zostanie dodany do ConstraintCollectionobiektu , ale właściwość nie jest ustawiona PrimaryKey .

  • Jeśli zostaną zwrócone zarówno kolumny klucza podstawowego, jak i kolumny unikatowe, kolumny klucza podstawowego są używane jako kolumny klucza podstawowego dla elementu DataTable.

Należy pamiętać, że klucze podstawowe i unikatowe ograniczenia są dodawane zgodnie ConstraintCollection z poprzednimi regułami, ale nie są dodawane inne typy ograniczeń. Ten proces może wymagać kilku rund na serwerze.

Jeśli unikatowy indeks grupowany jest zdefiniowany w kolumnie lub kolumnach w tabeli SQL Server, a ograniczenie klucza podstawowego jest definiowane w oddzielnym zestawie kolumn, zwracane będą nazwy kolumn w indeksie klastrowanym. Aby zwrócić nazwę lub nazwy kolumn klucza podstawowego, użyj wskazówki dotyczącej zapytania z instrukcją SELECT, która określa nazwę indeksu klucza podstawowego. Aby uzyskać więcej informacji na temat określania wskazówek dotyczących zapytań, zobacz Wskazówki (Transact-SQL) — zapytanie.

Jeśli napotka DbDataAdapter zduplikowane kolumny podczas wypełniania DataTableelementu , generuje nazwy dla kolejnych kolumn przy użyciu wzorca "nazwakolumny1", "nazwa_kolumny2", "nazwa_kolumny3" itd. Jeśli dane przychodzące zawierają nienazwane kolumny, są one umieszczane w DataSet zależności od wzorca "Column1", "Column2" itd. Gdy do każdego zestawu wyników jest dodawanych wiele zestawów wyników, należy umieścić DataSet w oddzielnej tabeli. Dodatkowe zestawy wyników są nazwane przez dołączenie wartości całkowitych do określonej nazwy tabeli (na przykład "Tabela", "Tabela1", "Tabela2" itd.). Jeśli aplikacja używa nazw kolumn i tabel, upewnij się, że nie występują konflikty z tymi wzorcami nazewnictwa.

FillSchema nie zwraca żadnych wierszy. Fill Użyj metody , aby dodać wiersze do klasy DataTable.

Uwaga

W przypadku obsługi instrukcji sql wsadowych, które zwracają wiele wyników, implementacja FillSchema dostawcy danych .NET Framework dla OLE DB pobiera informacje o schemacie tylko dla pierwszego wyniku. Aby pobrać informacje o schemacie dla wielu wyników, użyj polecenia Fill z zestawem MissingSchemaAction na wartość AddWithKey.

W przypadku korzystania z programu FillSchemadostawca danych .NET Framework dla SQL Server dołącza klauzulę FOR BROWSE do wykonywanej instrukcji. Użytkownik powinien mieć świadomość potencjalnych skutków ubocznych, takich jak ingerencja w stosowanie instrukcji SET FMTONLY ON. Aby uzyskać więcej informacji, zobacz SET FMTONLY (Transact-SQL).

Zobacz też

Dotyczy

FillSchema(DataSet, SchemaType)

Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs
Źródło:
DbDataAdapter.cs

DataTable Dodaje nazwę "Tabela" do określonego DataSet i konfiguruje schemat tak, aby był zgodny z tym w źródle danych na podstawie określonego SchemaTypeelementu .

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

Parametry

dataSet
DataSet

A DataSet do wstawienia schematu.

schemaType
SchemaType

SchemaType Jedna z wartości określających sposób wstawiania schematu.

Zwraca

Odwołanie do kolekcji DataTable obiektów, które zostały dodane do obiektu DataSet.

Implementuje

Przykłady

W poniższym przykładzie użyto klasy pochodnej , SqlDataAdapter, aby wypełnić DataSet element schematem i zwrócić wartość 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

Uwagi

Ta metoda pobiera informacje o schemacie ze źródła danych przy użyciu elementu SelectCommand.

Operacja FillSchema dodaje obiekt DataTable do lokalizacji docelowej DataSet. Następnie dodaje kolumny do DataColumnCollection elementu DataTablei konfiguruje następujące DataColumn właściwości, jeśli istnieją w źródle danych:

FillSchema Konfiguruje PrimaryKey również właściwości i Constraints zgodnie z następującymi regułami:

  • Jeśli co najmniej jedna kolumna klucza podstawowego SelectCommandjest zwracana przez element , są one używane jako kolumny klucza podstawowego dla elementu DataTable.

  • Jeśli nie są zwracane żadne kolumny klucza podstawowego, ale są to kolumny unikatowe, są używane jako klucz podstawowy, jeśli i tylko wtedy, gdy wszystkie unikatowe kolumny nie są możliwe. Jeśli którakolwiek z kolumn ma wartość null, element UniqueConstraint zostanie dodany do ConstraintCollectionobiektu , ale właściwość nie jest ustawiona PrimaryKey .

  • Jeśli zostaną zwrócone zarówno kolumny klucza podstawowego, jak i kolumny unikatowe, kolumny klucza podstawowego są używane jako kolumny klucza podstawowego dla elementu DataTable.

Należy pamiętać, że klucze podstawowe i unikatowe ograniczenia są dodawane zgodnie ConstraintCollection z poprzednimi regułami, ale nie są dodawane inne typy ograniczeń.

Jeśli unikatowy indeks grupowany jest zdefiniowany w kolumnie lub kolumnach w tabeli SQL Server, a ograniczenie klucza podstawowego jest definiowane w oddzielnym zestawie kolumn, zwracane będą nazwy kolumn w indeksie klastrowanym. Aby zwrócić nazwę lub nazwy kolumn klucza podstawowego, użyj wskazówki dotyczącej zapytania z instrukcją SELECT, która określa nazwę indeksu klucza podstawowego. Aby uzyskać więcej informacji na temat określania wskazówek dotyczących zapytań, zobacz Wskazówki (Transact-SQL) — zapytanie.

Informacje o kluczu podstawowym są używane podczas Fill znajdowania i zastępowania wszystkich wierszy, których kolumny kluczy są zgodne. Jeśli nie jest to pożądane zachowanie, użyj polecenia Fill bez żądania informacji o schemacie.

Jeśli napotka IDataAdapter zduplikowane kolumny podczas wypełniania DataTableelementu , generuje nazwy dla kolejnych kolumn przy użyciu wzorca "nazwakolumny1", "nazwa_kolumny2", "nazwa_kolumny3" itd. Jeśli dane przychodzące zawierają nienazwane kolumny, są one umieszczane w DataSet zależności od wzorca "Column1", "Column2" itd. Gdy do każdego zestawu wyników jest dodawanych wiele zestawów wyników, należy umieścić DataSet w oddzielnej tabeli. Dodatkowe zestawy wyników są nazwane przez dołączenie wartości całkowitych do określonej nazwy tabeli (na przykład "Tabela", "Tabela1", "Tabela2" itd.). Jeśli aplikacja używa nazw kolumn i tabel, upewnij się, że nie występują konflikty z tymi wzorcami nazewnictwa.

IDbConnection Obiekt skojarzony z poleceniem select musi być prawidłowy, ale nie musi być otwarty. Jeśli element IDbConnection jest zamknięty przed FillSchema wywołaniem, zostanie otwarty w celu pobrania danych, a następnie zamknięty. Jeśli połączenie jest otwarte przed FillSchema wywołaniem, pozostanie otwarte.

Uwaga

Podczas obsługi instrukcji batch SQL, które zwracają wiele wyników, implementacja FillSchema dostawcy danych .NET Framework dla OLE DB pobiera informacje o schemacie tylko dla pierwszego wyniku. Aby pobrać informacje o schemacie dla wielu wyników, użyj Fill polecenia z zestawem MissingSchemaAction .AddWithKey

W przypadku korzystania z FillSchemaprogramu dostawca danych .NET Framework dla SQL Server dołącza klauzulę FOR BROWSE do wykonywanej instrukcji. Użytkownik powinien mieć świadomość potencjalnych skutków ubocznych, takich jak ingerencja w użycie instrukcji SET FMTONLY ON. Aby uzyskać więcej informacji, zobacz SET FMTONLY (Transact-SQL).

Zobacz też

Dotyczy