共用方式為


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 屬性:

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

  • 如果 傳回 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支援包含多個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.  

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)受到保護,而且設計成供 .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 屬性:

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

  • 如果 傳回 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

注意

處理傳回多個結果的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)受到保護,而且設計成供 .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 屬性:

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

  • 如果 傳 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 支援的案例,其中 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.  

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

注意

處理傳回多個結果的批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實FillSchema作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 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 屬性:

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

  • 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

注意

處理傳回多個結果的批次 SQL 語句時,.NET Framework Data Provider for OLE DB 的 實FillSchema作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 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 屬性:

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

  • 如果 傳 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 語句時,.NET Framework Data Provider for OLE DB 的 實FillSchema作只會擷取第一個結果的架構資訊。 若要擷取多個結果的架構資訊,請使用 Fill 設定為 MissingSchemaActionAddWithKey

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

另請參閱

適用於