共用方式為


擷取數據列

IRowset 介面是基底數據列集介面。 IRowset 介面提供方法來循序擷取數據列、從這些數據列取得數據,以及管理數據列。 取用者會針對所有基本數據列集作業使用 IRowset 中的方法。 這包括擷取和釋放數據列,以及取得數據行值。

當取用者取得數據列集上的介面指標時,第一個步驟通常是使用 IRowsetInfo::GetProperties 方法來判斷數據列集的功能。 這會傳回數據列集所公開之介面的相關信息,以及未顯示為不同介面的數據列集功能,例如作用中數據列數目上限,以及可以同時有擱置更新的數據列數目。

取用者的下一個步驟是判斷數據列集中數據行的特性或元數據。 為此,他們會使用 IColumnsInfo 方法取得簡單的數據行資訊,或針對擴充數據行資訊使用 IColumnsRowset 方法。 GetColumnInfo 方法會傳回下列資訊:

  • 結果集中的數據行數目。

  • DBCOLUMNINFO 結構的數位,每個數據行各一個。

    結構的順序是數據行出現在數據列集中的順序。 每個 DBCOLUMNINFO 結構都包含數據行元數據,例如數據行名稱、數據行序數、數據行中值的最大可能長度、數據行數據類型、有效位數和長度。

  • 單一配置區塊內所有字串值的記憶體指標。

取用者會根據產生數據列集的文字命令,從元數據決定需要哪些數據行。 它會從 IColumnsInfo 所傳回之數據行資訊的順序,或從 IColumnsRowset 所傳回之數據行元數據數據列集中的序數,判斷所需數據行的序數。

IColumnsInfoIColumnsRowset 介面可用來擷取數據列集中數據行的相關信息。 IColumnsInfo 介面會傳回一組有限的資訊,而 IColumnsRowset 則提供所有元數據。

備註

在 SQL Server 7.0 版和更早版本中, IColumnsInfo::GetColumnsInfo 傳回的選擇性元數據行DBCOLUMN_COMPUTEMODE傳回DBSTATUS_S_ISNULL(而不是描述數據行是否計算的值),因為它無法判斷基礎數據行是否計算。

序數可用來指定數據行的系結。 系結是一種結構,可將取用者結構的元素與數據行產生關聯。 系結可以系結數據行的數據值、長度和狀態值。

一組系結會聚集在存取子中。 這是使用 IAccessor::CreateAccessor 方法建立的。 存取子可以包含多個系結,以便在單一呼叫中擷取或設定多個數據行的數據。 取用者可以建立數個存取子,以符合應用程式不同部分的不同使用模式。 當數據列集仍然存在時,它可以建立和釋放存取子。

若要從資料庫擷取數據列,取用者會呼叫方法,例如 IRowset::GetNextRowsIRowsetLocate::GetRowsAt。 這些擷取作業會將伺服器的數據列數據放入提供者的數據列緩衝區。 取用者無法直接存取提供者的數據列緩衝區。 取用者會使用 IRowset::GetData ,將數據從提供者的緩衝區複製到取用者緩衝區, 而 IRowsetChange::SetData 會將數據變更從取用者緩衝區複製到提供者緩衝區。

取用者會呼叫 GetData 方法,並將句柄傳遞至數據列、存取子的句柄,以及取用者配置的緩衝區指標。 GetData 會轉換數據,並傳回用來建立存取子之系結中指定的數據行。 取用者可以使用不同的存取子和緩衝區,多次呼叫 GetData ,因此取用者可以取得相同數據的多個複本。

您可以從可變長度數據行處理數種方式。 首先,這類數據行可以系結至取用者結構的有限區段。 當數據長度超過緩衝區的長度時,這會導致截斷。 取用者可以藉由檢查狀態DBSTATUS_S_TRUNCATED來判斷已發生截斷。 傳回的長度一律為以位元組為單位的真正長度,讓取用者也可以判斷截斷的數據量。

當取用者完成擷取或更新數據列時,它會使用 ReleaseRows 方法釋放它們。 這會從數據列集的數據列復本釋放資源,併為新的數據列騰出空間。 然後,取用者可以重複其擷取或建立數據列並存取數據迴圈。

當取用者完成數據列集時,它會呼叫 IAccessor::ReleaseAccessor 方法來釋放任何存取子。 它會在數據列集公開的所有介面上呼叫 IUnknown::Release 方法,以釋放數據列集。 發行數據列集時,它會強制釋放取用者可能保留的任何剩餘數據列或存取子。

本節中

另請參閱

資料列集