字元資料和 C 字串
參考可變長度字元資料 (例如資料行名稱、動態參數和字串屬性值) 的輸入參數具有相關聯的長度參數。 如果應用程式以 Null 字元終止字串 (C 語法中的常見方式),則會以引數的形式提供字串的位元組長度 (不包含 null 結束字元) 或 SQL_NTS (Null 終止字串)。 非負長度引數會指定相關聯字串的實際長度。 長度引數可以是 0,以指定零長度字串,這與 NULL 值不同。 負值 SQL_NTS 會指示驅動程式尋找 null 結束字元來判斷字串的長度。
從驅動程式傳回字元資料至應用程式時,驅動程式必須一律以 null 終止。 這可讓應用程式選擇要將資料作為字串或字元陣列來處理。 如果應用程式緩衝區不夠大,無法傳回所有字元資料,驅動程式會將其截斷為緩衝區的位元組長度 (低於 Null 終止字元所需的位元組數目)、以 null 終止截斷的資料,並將其儲存在緩衝區中。 因此,應用程式必須一律為緩衝區中用來擷取字元資料的 Null 終止字元,配置額外的空間。 例如,需要 51 位元組的緩衝區,才能擷取 50 個字元的資料。
利用 SQLPutData 或 SQLGetData 傳送或擷取組件中的長字元資料時,應用程式和驅動程式都必須特別小心。 如果資料以一系列 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 字元的字元資料。