共用方式為


字元資料和 C 字串

參考可變長度字元資料 (例如資料行名稱、動態參數和字串屬性值) 的輸入參數具有相關聯的長度參數。 如果應用程式以 Null 字元終止字串 (C 語法中的常見方式),則會以引數的形式提供字串的位元組長度 (不包含 null 結束字元) 或 SQL_NTS (Null 終止字串)。 非負長度引數會指定相關聯字串的實際長度。 長度引數可以是 0,以指定零長度字串,這與 NULL 值不同。 負值 SQL_NTS 會指示驅動程式尋找 null 結束字元來判斷字串的長度。

從驅動程式傳回字元資料至應用程式時,驅動程式必須一律以 null 終止。 這可讓應用程式選擇要將資料作為字串或字元陣列來處理。 如果應用程式緩衝區不夠大,無法傳回所有字元資料,驅動程式會將其截斷為緩衝區的位元組長度 (低於 Null 終止字元所需的位元組數目)、以 null 終止截斷的資料,並將其儲存在緩衝區中。 因此,應用程式必須一律為緩衝區中用來擷取字元資料的 Null 終止字元,配置額外的空間。 例如,需要 51 位元組的緩衝區,才能擷取 50 個字元的資料。

利用 SQLPutDataSQLGetData 傳送或擷取組件中的長字元資料時,應用程式和驅動程式都必須特別小心。 如果資料以一系列 Null 終止的字串傳遞,則必須移除這些字串上的 Null 終止字元,才能重組資料。

許多 ODBC 程式設計人員有混淆的字元資料和 C 字串。 這是使用 C 語言定義 ODBC 函式時會產生的情況。 如果 ODBC 驅動程式或應用程式使用另一種語言 (請記住 ODBC 與語言無關),則較不可能產生這種混淆。

當 C 字串用來保存字元資料時,Null 終止字元不會視為是資料的一部分,也不會計入其位元組長度。 例如,字元資料「ABC」可以保留為 C 字串「ABC\0」或字元陣列 {'A', 'B', 'C'}。 資料的位元組長度為 3,不論是否視為字串或字元陣列。

雖然應用程式和驅動程式通常會使用 C 字串 (以 null 結尾的字元陣列) 來保存字元資料,但不需要這麼做。 在 C 中,字元資料也可以視為是字元陣列 (不含 null 終止),且其位元組長度會在長度/指標緩衝區中個別傳遞。

因為字元資料可以保留在非 Null 終止的陣列中,且會個別傳遞其位元組長度,所以可以在字元資料中內嵌 Null 字元。 不過,在此情況下,ODBC 函式的行為未經定義,而且驅動程式控制代碼是否能正確處理此情況,端看各驅動程式。 因此,互通的應用程式應該一律處理能以二進位資料形式包含內嵌 Null 字元的字元資料。