DbDataAdapter.FillSchema 方法

定義

加入 DataTableDataSet,並且設定結構描述,以符合資料來源中的資料表。

多載

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

DataTable 加入至指定的 DataSet,並且根據指定的 SchemaType 設定結構描述,以符合資料來源中的資料表。

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

根據指定的 DataTable、命令字串和 SchemaType 值,設定指定 CommandBehavior 的結構描述。

FillSchema(DataSet, SchemaType, String)

DataTable 加入至指定的 DataSet,並且根據指定的 SchemaTypeDataTable 設定結構描述,以符合資料來源中的資料表。

FillSchema(DataTable, SchemaType)

根據指定的 DataTable,設定指定 SchemaType 的結構描述。

FillSchema(DataSet, SchemaType)

將名稱為 "Table" 的 DataTable 加入至指定的 DataSet,並根據指定的 SchemaType,設定結構描述以符合資料來源中的資料表。

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

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

DataTable 加入至指定的 DataSet,並且根據指定的 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);
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()

參數

dataSet
DataSet

DataSet,以資料來源中的結構描述來填入其中。

schemaType
SchemaType

其中一個 SchemaType 值。

command
IDbCommand

用來從資料來源擷取資料列的 SQL SELECT 陳述式。

srcTable
String

用於資料表對應的來源資料表名稱。

behavior
CommandBehavior

其中一個 CommandBehavior 值。

傳回

DataTable 物件的陣列,包含從資料來源傳回的結構描述資訊。

備註

方法 FillSchema 會使用 SelectCommand 從資料來源擷取架構。 與 SelectCommand 相關聯的連線物件必須有效,但不需要開啟。 如果在呼叫之前 FillSchema 關閉連線,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 FillSchema 開啟連線,它會保持開啟狀態。

作業 FillSchema 會將 加入 DataTable 目的地 DataSet 。 然後,它會將資料行新增至 DataColumnCollectionDataTable ,並在資料來源存在時設定下列 DataColumn 屬性:

FillSchema 也會根據下列規則來設定 PrimaryKeyConstraints 屬性:

  • 如果 傳 SelectCommand 回一或多個主鍵資料行,則會當做 的主 DataTable 鍵資料行使用。

  • 如果沒有傳回主鍵資料行,但唯一資料行是 ,唯一的資料行會當做主鍵使用,而且只有在所有唯一資料行都不可為 Null 時。 如果任一資料行皆可為 Null, UniqueConstraint 則會將 新增至 ConstraintCollection ,但 PrimaryKey 未設定 屬性。

  • 如果同時傳回主鍵資料行和唯一資料行,則主鍵資料行會做為 的主 DataTable 鍵資料行。

請注意,主鍵和唯一條件約束會根據上述規則新增至 ConstraintCollection ,但不會新增其他條件約束類型。

如果在SQL Server資料表中的資料行或資料行上定義唯一的叢集索引,而且主鍵條件約束是在一組個別的資料行上定義,則會傳回叢集索引中的資料行名稱。 若要傳回主鍵資料行的名稱或名稱,請使用查詢提示搭配 SELECT 語句來指定主鍵索引的名稱。 如需指定查詢提示的詳細資訊,請參閱 Transact-SQL) - 查詢 (提示。

如果在填入 DataTable 時遇到重複的資料行,則會使用模式 「columnname 1」、「columnname2」、「columnname3」 等,產生後續資料行的名稱。 IDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至每個結果集時, DataSet 會放在個別的資料表中。 其他結果集的命名方式是將整數值附加至指定的資料表名稱 (,例如 「Table」、「Table1」、「Table2」 等等。) 。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

方法 FillSchema 支援 的案例,其中 DataSet 包含多個 DataTable 物件的名稱只依大小寫而有所不同。 在這種情況下, FillSchema 會執行區分大小寫的比較來尋找對應的資料表,並在沒有完全相符專案時建立新的資料表。 下列 C# 程式碼說明此行為。

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

如果 FillSchema 呼叫 ,且 DataSetDataTable 包含名稱只依大小寫 DataTable 而不同之名稱的 ,則會更新。 在此案例中,比較不區分大小寫。 下列 C# 程式碼說明此行為。

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 不會傳回任何資料列。 Fill使用 方法可將資料列加入至 DataTable

注意

處理傳回多個結果的批次 SQL 語句時, FillSchema .NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

使用 FillSchema 時,.NET Framework Data Provider for SQL Server 會將 FOR BROWSE 子句附加到正要執行的陳述式。 使用者應注意潛在的副作用,例如使用 SET FMTONLY ON 陳述式的干擾。 如需詳細資訊,請參閱 SET FMTONLY (Transact-SQL)

給繼承者的注意事項

此方法的這個 FillSchema(DataSet, SchemaType) 實作受到保護,並且設計供.NET Framework資料提供者使用。

另請參閱

適用於

FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

根據指定的 DataTable、命令字串和 SchemaType 值,設定指定 CommandBehavior 的結構描述。

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

參數

dataTable
DataTable

DataTable,以資料來源中的結構描述來填入其中。

schemaType
SchemaType

其中一個 SchemaType 值。

command
IDbCommand

用來從資料來源擷取資料列的 SQL SELECT 陳述式。

behavior
CommandBehavior

其中一個 CommandBehavior 值。

傳回

DataTable 物件,包含從資料來源傳回的結構描述資訊。

備註

方法 FillSchema 會使用 SelectCommand 從資料來源擷取架構。 與 SelectCommand 相關聯的連線物件必須有效,但不需要開啟。 如果在呼叫之前 FillSchema 關閉連線,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 FillSchema 開啟連線,它會保持開啟狀態。

作業 FillSchema 會將 加入 DataTable 目的地 DataSet 。 然後,它會將資料行新增至 DataColumnCollectionDataTable ,並在資料來源存在時設定下列 DataColumn 屬性:

FillSchema 也會根據下列規則來設定 PrimaryKeyConstraints 屬性:

  • 如果 傳 SelectCommand 回一或多個主鍵資料行,則會當做 的主 DataTable 鍵資料行使用。

  • 如果沒有傳回主鍵資料行,但唯一資料行是 ,唯一的資料行會當做主鍵使用,而且只有在所有唯一資料行都不可為 Null 時。 如果任一資料行皆可為 Null, UniqueConstraint 則會將 新增至 ConstraintCollection ,但 PrimaryKey 未設定 屬性。

  • 如果同時傳回主鍵資料行和唯一資料行,則主鍵資料行會做為 的主 DataTable 鍵資料行。

請注意,主鍵和唯一條件約束會根據上述規則新增至 ConstraintCollection ,但不會新增其他條件約束類型。

如果在SQL Server資料表中的資料行或資料行上定義唯一的叢集索引,而且主鍵條件約束是在一組個別的資料行上定義,則會傳回叢集索引中的資料行名稱。 若要傳回主鍵資料行的名稱或名稱,請使用查詢提示搭配 SELECT 語句來指定主鍵索引的名稱。 如需指定查詢提示的詳細資訊,請參閱 Transact-SQL) - 查詢 (提示。

如果在填入 DataTable 時遇到重複的資料行,則會使用模式 「columnname 1」、「columnname2」、「columnname3」 等,產生後續資料行的名稱。 IDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至每個結果集時, DataSet 會放在個別的資料表中。 其他結果集的命名方式是將整數值附加至指定的資料表名稱 (,例如 「Table」、「Table1」、「Table2」 等等。) 。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

FillSchema 不會傳回任何資料列。 Fill使用 方法可將資料列加入至 DataTable

注意

處理傳回多個結果的批次 SQL 語句時, FillSchema .NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

使用 FillSchema 時,.NET Framework Data Provider for SQL Server 會將 FOR BROWSE 子句附加到正要執行的陳述式。 使用者應注意潛在的副作用,例如使用 SET FMTONLY ON 陳述式的干擾。 如需詳細資訊,請參閱 SET FMTONLY (Transact-SQL)

給繼承者的注意事項

此方法的這個 FillSchema(DataSet, SchemaType) 實作受到保護,並且設計供.NET Framework資料提供者使用。

另請參閱

適用於

FillSchema(DataSet, SchemaType, String)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

DataTable 加入至指定的 DataSet,並且根據指定的 SchemaTypeDataTable 設定結構描述,以符合資料來源中的資料表。

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

參數

dataSet
DataSet

要插入結構描述的 DataSet

schemaType
SchemaType

其中一個 SchemaType 值,指定插入結構描述的方法。

srcTable
String

用於資料表對應的來源資料表名稱。

傳回

已加入至 DataTableDataSet 物件集合的參考。

例外狀況

無法找到要取得結構描述的來源資料表。

範例

下列範例會使用 衍生類別 SqlDataAdapter ,以架構填滿 DataSet ,並傳 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

備註

這個方法會使用 SelectCommand 從資料來源擷取架構資訊。

作業 FillSchema 會將 加入 DataTable 目的地 DataSet 。 然後,它會將資料行新增至 DataColumnCollectionDataTable ,並在資料來源存在時設定下列 DataColumn 屬性:

FillSchemaPrimaryKey也會根據下列規則來設定 和 Constraints 屬性:

  • 如果 傳回 SelectCommand 一或多個主鍵資料行,它們會作為 的主 DataTable 鍵資料行。

  • 如果沒有傳回主鍵資料行,但唯一資料行是 ,唯一資料行會當做主鍵使用,而且只有在所有唯一資料行都不可為 Null 時,才會使用唯一的資料行。 如果任一資料行可為 Null,則會 UniqueConstraint 將 加入至 ConstraintCollection ,但 PrimaryKey 未設定 屬性。

  • 如果傳回主鍵資料行和唯一資料行,主鍵資料行會當做 的主鍵資料行 DataTable 使用。

請注意,主鍵和唯一條件約束會根據上述規則新增至 ConstraintCollection ,但不會新增其他條件約束類型。

如果在SQL Server資料表的資料行上定義唯一的叢集索引,而且主鍵條件約束是在個別的資料行集上定義,則會傳回叢集索引中的資料行名稱。 若要傳回主鍵資料行的名稱或名稱,請使用查詢提示搭配 SELECT 語句來指定主鍵索引的名稱。 如需指定查詢提示的詳細資訊,請參閱 Transact-SQL) - 查詢 (提示

在 期間 Fill 會使用主鍵資訊來尋找和取代索引鍵資料行相符的任何資料列。 如果這不是所需的行為,請使用 Fill 而不要求架構資訊。

如果在填入 DataTable 時遇到重複的資料行,它會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至 DataSet 每個結果集時,會放在個別的資料表中。 將整數值附加至指定的資料表名稱,以命名其他結果集 (,例如 「Table」、「Table1」、「Table2」 等等。) 。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

方法 FillSchema 支援包含多個 DataTable 物件的案例 DataSet ,其名稱只有大小寫不同。 在這種情況下, FillSchema 執行區分大小寫的比較來尋找對應的資料表,並在沒有完全相符專案時建立新的資料表。 下列 C# 程式碼說明此行為。

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

如果 FillSchema 呼叫 ,且 DataSetDataTable 包含名稱只因大小寫而不同,則會 DataTable 更新的 。 在此案例中,比較不區分大小寫。 下列 C# 程式碼說明此行為。

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.  

IDbConnection與 select 命令相關聯的物件必須有效,但不需要開啟。 IDbConnection如果在呼叫 之前 FillSchema 關閉 ,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 FillSchema 開啟連接,則會保持開啟狀態。

注意

處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

使用 FillSchema 時,.NET Framework Data Provider for SQL Server 會將 FOR BROWSE 子句附加到正要執行的陳述式。 使用者應注意潛在的副作用,例如使用 SET FMTONLY ON 陳述式的干擾。 如需詳細資訊,請參閱 SET FMTONLY (Transact-SQL)

另請參閱

適用於

FillSchema(DataTable, SchemaType)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

根據指定的 DataTable,設定指定 SchemaType 的結構描述。

public:
 System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType);
public System.Data.DataTable? FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
public System.Data.DataTable FillSchema (System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
Public Function FillSchema (dataTable As DataTable, schemaType As SchemaType) As DataTable

參數

dataTable
DataTable

DataTable,以資料來源中的結構描述來填入其中。

schemaType
SchemaType

其中一個 SchemaType 值。

傳回

DataTable,包含從資料來源傳回的結構描述資訊。

範例

下列範例會使用 衍生類別 SqlDataAdapter ,以架構填滿 DataSet ,並傳 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

備註

方法 FillSchema 會使用 SelectCommand 從資料來源擷取架構。 與 相關聯的 SelectCommand 連線物件必須有效,但不需要開啟。 如果在呼叫之前 FillSchema 關閉連線,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 FillSchema 開啟連線,它會保持開啟狀態。

作業 FillSchema 會傳 DataTable 回 。 然後,它會將資料行新增至 DataColumnCollectionDataTable ,並在資料來源存在時設定下列 DataColumn 屬性:

FillSchemaPrimaryKey也會根據下列規則來設定 和 Constraints 屬性:

  • PrimaryKey如果 已經為 DataTable 定義 ,或 DataTable 包含資料, PrimaryKey 則不會設定 屬性。

  • 如果 傳回 SelectCommand 一或多個主鍵資料行,它們會作為 的主 DataTable 鍵資料行。

  • 如果沒有傳回主鍵資料行,但唯一資料行是 ,唯一資料行會當做主鍵使用,而且只有在所有唯一資料行都不可為 Null 時,才會使用唯一的資料行。 如果任一資料行可為 Null,則會 UniqueConstraint 將 加入至 ConstraintCollection ,但 PrimaryKey 未設定 屬性。

  • 如果傳回主鍵資料行和唯一資料行,主鍵資料行會當做 的主鍵資料行 DataTable 使用。

請注意,主鍵和唯一條件約束會根據上述規則新增至 ConstraintCollection ,但不會新增其他條件約束類型。 此程式可能需要數次往返伺服器。

如果在SQL Server資料表的資料行上定義唯一的叢集索引,而且主鍵條件約束是在個別的資料行集上定義,則會傳回叢集索引中的資料行名稱。 若要傳回主鍵資料行的名稱或名稱,請使用查詢提示搭配 SELECT 語句來指定主鍵索引的名稱。 如需指定查詢提示的詳細資訊,請參閱 Transact-SQL) - 查詢 (提示

如果在填入 DataTable 時遇到重複的資料行,它會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 DbDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至 DataSet 每個結果集時,會放在個別的資料表中。 將整數值附加至指定的資料表名稱,以命名其他結果集 (,例如 「Table」、「Table1」、「Table2」 等等。) 。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

FillSchema 不會傳回任何資料列。 Fill使用 方法,將資料列加入至 DataTable

注意

處理傳回多個結果的 FillSchema 批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

使用 FillSchema 時,.NET Framework Data Provider for SQL Server 會將 FOR BROWSE 子句附加到正要執行的陳述式。 使用者應注意潛在的副作用,例如使用 SET FMTONLY ON 陳述式的干擾。 如需詳細資訊,請參閱 SET FMTONLY (Transact-SQL)

另請參閱

適用於

FillSchema(DataSet, SchemaType)

來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs
來源:
DbDataAdapter.cs

將名稱為 "Table" 的 DataTable 加入至指定的 DataSet,並根據指定的 SchemaType,設定結構描述以符合資料來源中的資料表。

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

參數

dataSet
DataSet

要插入結構描述的 DataSet

schemaType
SchemaType

其中一個 SchemaType 值,指定插入結構描述的方法。

傳回

已加入至 DataTableDataSet 物件集合的參考。

實作

範例

下列範例會使用 衍生類別 SqlDataAdapter ,以架構填滿 DataSet ,並傳 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

備註

這個方法會使用 SelectCommand 從資料來源擷取架構資訊。

作業 FillSchema 會將 加入 DataTable 目的地 DataSet 。 然後,它會將資料行新增至 DataColumnCollectionDataTable ,並在資料來源存在時設定下列 DataColumn 屬性:

FillSchemaPrimaryKey也會根據下列規則來設定 和 Constraints 屬性:

  • 如果 傳回 SelectCommand 一或多個主鍵資料行,它們會作為 的主 DataTable 鍵資料行。

  • 如果沒有傳回主鍵資料行,但唯一資料行是 ,唯一資料行會當做主鍵使用,而且只有在所有唯一資料行都不可為 Null 時,才會使用唯一的資料行。 如果任一資料行可為 Null,則會 UniqueConstraint 將 加入至 ConstraintCollection ,但 PrimaryKey 未設定 屬性。

  • 如果傳回主鍵資料行和唯一資料行,主鍵資料行會當做 的主鍵資料行 DataTable 使用。

請注意,主鍵和唯一條件約束會根據上述規則新增至 ConstraintCollection ,但不會新增其他條件約束類型。

如果在SQL Server資料表的資料行上定義唯一的叢集索引,而且主鍵條件約束是在個別的資料行集上定義,則會傳回叢集索引中的資料行名稱。 若要傳回主鍵資料行的名稱或名稱,請使用查詢提示搭配 SELECT 語句來指定主鍵索引的名稱。 如需指定查詢提示的詳細資訊,請參閱 Transact-SQL) - 查詢 (提示

在 期間 Fill 會使用主鍵資訊來尋找和取代索引鍵資料行相符的任何資料列。 如果這不是所需的行為,請使用 Fill 而不要求架構資訊。

如果在填入 DataTable 時遇到重複的資料行,它會使用模式 「columnname 1」、「columnname2」、「columnname3」 等模式產生後續資料行的名稱。 IDataAdapter 如果傳入資料包含未命名的資料行,則會根據模式 「Column1」、「Column2」 等,將它們放在 DataSet 中。 將多個結果集加入至 DataSet 每個結果集時,會放在個別的資料表中。 將整數值附加至指定的資料表名稱,以命名其他結果集 (,例如 「Table」、「Table1」、「Table2」 等等。) 。 如果您的應用程式使用資料行和資料表名稱,請確定這些命名模式沒有任何衝突。

IDbConnection與 select 命令相關聯的物件必須有效,但不需要開啟。 IDbConnection如果在呼叫 之前 FillSchema 關閉 ,則會開啟以擷取資料,然後關閉。 如果在呼叫之前 FillSchema 開啟連線,則會保持開啟狀態。

注意

處理傳回多個結果的批次 SQL 語句時, FillSchema .NET Framework Data Provider for OLE DB 的 實作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

使用 FillSchema 時,.NET Framework Data Provider for SQL Server 會將 FOR BROWSE 子句附加到正要執行的陳述式。 使用者應注意潛在的副作用,例如使用 SET FMTONLY ON 陳述式的干擾。 如需詳細資訊,請參閱 SET FMTONLY (Transact-SQL)

另請參閱

適用於