緩衝區是用於應用程式與驅動程式之間傳遞資料的任何應用程式記憶體。 例如,應用程式緩衝區可以用 SQLBindCol 與結果集欄位關聯或綁定。 每當資料列被擷取時,會回傳這些緩衝區中每一欄的資料。 輸入緩衝 區用於將資料從應用程式傳遞給驅動程式; 輸出緩衝 區用於將驅動程式的資料回傳給應用程式。
備註
如果 ODBC 函式回傳 SQL_ERROR,該函式的任何輸出參數內容皆未定義。
本討論主要關注不確定類型的緩衝區。 這些緩衝區的位址以 SQLPOINTER 類型的參數形式出現,例如 SQLBindCol 中的 TargetValuePtr 參數。 然而,這裡討論的一些項目,例如用於緩衝區的參數,也適用於用於傳遞字串給驅動程式的參數,例如 SQLTables 中的 TableName 參數。
這些緩衝器通常成對出現。 資料緩衝 區用於傳遞資料本身,而 長度/指示緩衝區 則用於傳遞資料緩衝區中資料的長度或特殊值(如 SQL_NULL_DATA),表示資料為 NULL。 資料緩衝區中資料的長度與資料緩衝區本身的長度不同。 以下圖示展示了資料緩衝區與長度/指示緩衝區之間的關係。
當資料緩衝區包含可變長度資料(如字元或二進位資料)時,就需要長度/指示緩衝區。 如果資料緩衝區包含固定長度的資料,例如整數或日期結構,則只需在傳遞指示值時就需要長度/指示緩衝區,因為資料的長度已經是已知的。 如果應用程式使用帶有固定長度資料的長度/指示緩衝區,驅動程式會忽略該緩衝區中傳遞的任何長度。
資料緩衝區及其所包含的資料長度皆以位元組為單位,而非字元。 對於使用 ANSI 字串的程式來說,這種區別並不重要,因為位元組和字元的長度相同。
當資料緩衝區代表驅動程式定義的描述符欄位、診斷欄位或屬性時,應用程式應向驅動程式管理器指示該欄位或屬性值的函式參數性質。 應用程式透過在任何將欄位或屬性設定為以下值之一的函式呼叫中,設定長度參數來達成此目的。 (同樣的情況也適用於擷取欄位或屬性值的函數,唯一例外是參數指向參數本身中設定函數的值。)
如果指示欄位或屬性值的函式參數是指向字串的指標,那麼 長度 參數就是該字串或 SQL_NTS 的長度。
如果指示欄位或屬性值的函式參數是指向二進位緩衝區的指標,應用程式會將 SQL_LEN_BINARY_ATTR(length) 巨集 的結果置入 長度 參數中。 這會使 長度 參數成為負值。
如果指示欄位或屬性值的函式參數是指向非字元字串或二進位字串的值的指標, 則長度 參數的值應該為 SQL_IS_POINTER。
如果指示欄位或屬性值的函式參數包含固定長度值,則 長度 參數可依照適當方式為SQL_IS_INTEGER、SQL_IS_UINTEGER、SQL_IS_SMALLINT或SQL_ISI_USMALLINT。
此章節包含下列主題。