將數據從 C 轉換成 SQL 資料類型

當應用程式呼叫 SQLExecuteSQLExecDirect 時,驅動程式會從應用程式中的儲存位置擷取與 SQLBindParameter 系結之任何參數的數據。 當應用程式呼叫 SQLSetPos 時,驅動程式會從與 SQLBindCol 系結的數據行擷取更新或新增作業的數據。 針對執行中數據參數,應用程式會使用 SQLPutData 傳送參數數據。 如有必要,驅動程式會將 SQLBindParameter 中 ValueType 自變數所指定的數據類型轉換成 SQLBindParameter 中 ParameterType 自變數所指定的數據類型,然後將數據傳送至數據源。

下表顯示從 ODBC C 資料類型轉換成 ODBC SQL 資料類型的支援轉換。 填滿的圓形表示 SQL 資料類型的預設轉換(當 ValueType 的值或SQL_DESC_CONCISE_TYPE描述元欄位為SQL_C_DEFAULT時,將會轉換數據的 C 數據類型)。 空心圓表示支持的轉換。

已轉換數據的格式不會受到 Windows 國家或地區設定的影響。

Supported conversions: ODBC C to SQL data types

下列各節中的數據表說明驅動程式或數據源如何將傳送至數據源的數據轉換;驅動程式必須支援從所有 ODBC C 資料類型轉換成其支援的 ODBC SQL 資料類型。 針對指定的 ODBC C 數據類型,數據表的第一個數據行會列出 SQLBindParameter 中 ParameterType 自變數的法律輸入值。 第二個數據行列出驅動程式執行的測試結果,以判斷它是否可以轉換數據。 第三個數據行列出 SQLExecDirect、SQLExecuteSQLBulkOperationsSQLSetPosSQLPutData 針對每個結果傳回的 SQLSTATE。 只有在傳回SQL_SUCCESS時,才會將數據傳送至數據源。

如果 SQLBindParameter 中的 ParameterType 自變數包含指定 C 數據類型資料表中未顯示的 ODBC SQL 數據類型識別碼,SQLBindParameter 會傳回 SQLSTATE 07006 (限制數據類型屬性違規)。 如果 ParameterType 自變數包含驅動程式特定的標識碼,而且驅動程式不支援從特定 ODBC C 數據類型轉換成該驅動程式特定的 SQL 數據類型,SQLBindParameter 會傳回 SQLSTATE HYC00(未實作選擇性功能)。

如果 SQLBindParameter 中指定的 ParameterValuePtrStrLen_or_IndPtr自變數都是 Null 指標,該函式會傳回 SQLSTATE HY009 (Null 指標使用無效)。 雖然數據表中未顯示,但應用程式會將 SQLBindParameter StrLen_or_IndPtr 自變數所指向的長度/指標緩衝區值,或 SQLPutData StrLen_or_IndPtr 自變數的值設定為SQL_NULL_DATA以指定 NULL SQL 數據值。 (The StrLen_or_IndPtr自變數對應至 APD 的 SQL_DESC_OCTET_LENGTH_PTR 欄位。應用程式會將這些值設定為 SQL_NTS,以指定 SQLBindParameter 中的 *ParameterValuePtr 或 SQLPutData *DataPtr 的值(由 APD 的 SQL_DESC_DATA_PTR 欄位所指向)是 Null 終止的字串。

資料表中會使用下列詞彙:

  • 位元組長度的數據 - 可供傳送至數據源的 SQL 數據位元組數目,不論數據是否會在傳送至數據源之前遭到截斷。 對於字串數據,這不包含 null 終止字元的空間。

  • 數據行位元組長度 - 將資料儲存在資料源所需的位元元組數目。

  • 位元位元組長度 - 字元格式顯示資料所需的位元組數目上限。 這如顯示大小中的每個 SQL 資料類型所定義,但字元位元組長度為位元組,而顯示大小則以字元為單位。

  • 數字 數 - 用來代表數位的字元數,包括減號、小數點和指數(如有需要)。

  • 中的單字
    斜體 - SQL 文法的元素。 如需文法元素的語法,請參閱 附錄 C:SQL 文法

此章節包含下列主題。