SQLDriverToDataSource 函式
SQLDriverToDataSource 支援 ODBC 驅動程式的翻譯。 啟用 ODBC 的應用程式不會呼叫此函式;應用程式會透過 SQLSetConnectAttr 要求翻譯。 與 SQLSetConnectAttr 中指定的 ConnectionHandle 相關聯的驅動程式會呼叫指定的 DLL,以執行從驅動程式流向資料來源的所有資料轉譯。 您可以在 ODBC 初始化檔案中指定預設轉譯 DLL。
語法
BOOL SQLDriverToDataSource(
UDWORD fOption,
SWORD fSqlType,
PTR rgbValueIn,
SDWORD cbValueIn,
PTR rgbValueOut,
SDWORD cbValueOutMax,
SDWORD * pcbValueOut,
UCHAR * szErrorMsg,
SWORD cbErrorMsgMax,
SWORD * pcbErrorMsg);
引數
FOption
[輸入]選項值。
fSqlType
[輸入]ODBC SQL 資料類型。 這個引數會告知驅動程式如何將 rgbValueIn 轉換成 資料來源可接受的表單。 如需有效 SQL 資料類型的清單,請參閱 SQL 資料類型 。
rgbValueIn
[輸入]要轉譯的值。
cbValueIn
[輸入]rgbValueIn 的 長度。
rgbValueOut
[輸出]翻譯的結果。
注意
轉譯 DLL 不會以 Null 結束這個值。
cbValueOutMax
[輸入]rgbValueOut 的 長度。
pcoValueOut
[輸出]可在 rgbValueOut 中 傳回的位元組總數(不包括 Null 終止位元組)。
針對字元或二進位資料,如果此值大於或等於 cbValueOutMax ,rgbValueOut 中的資料 會截斷為 cbValueOutMax 位元組。
對於所有其他資料類型,會忽略 cbValueOutMax 的值 ,而轉譯 DLL 會假設 rgbValueOut 的大小 是使用 fSqlType 所指定 SQL 資料類型的預設 C 資料類型 大小。
對等值值 引數可以是 Null 指標。
szErrorMsg
[輸出]錯誤訊息的儲存體指標。 除非翻譯失敗,否則這是空字串。
cbErrorMsgMax
[輸入]szErrorMsg 的 長度。
pcbErrorMsg
[輸出]可用在 szErrorMsg 中 傳回的位元組總數指標(不包括 Null 終止位元組)。 如果這大於或等於 cbErrorMsg ,szErrorMsg 中的資料 會截斷為 cbErrorMsgMax 減去 null 終止字元。 oemErrorMsg 引數可以是 Null 指標。
傳回
如果翻譯成功,則為 TRUE;如果翻譯失敗,則為 FALSE。
註解
驅動程式會呼叫 SQLDriverToDataSource ,以轉譯從驅動程式傳遞至資料來源的所有資料(SQL 語句、參數等等)。 轉譯 DLL 可能不會轉譯某些資料,視資料的類型和轉譯 DLL 的用途而定。 例如,將字元資料從一個字碼頁轉譯為另一個字碼頁的 DLL 會忽略所有數值和二進位資料。
fOption 的值 會設定為使用 SQL_ATTR_TRANSLATE_OPTION 屬性呼叫 SQLSetConnectAttr 所指定的 vParam 值 。 這是一個 32 位值,具有指定翻譯 DLL 的特定意義。 例如,它可以指定特定的字元集轉譯。
如果為 rgbValueIn 和 rgbValueOut 指定了相同的緩衝區,則會就地執行緩衝區中的資料轉譯。
雖然 cbValueIn 、 cbValueOutMax 和 cbValueOut 的類型為 SDWORD, 但 SQLDriverToDataSource 不一定支援大型指標。
如果 SQLDriverToDataSource 傳回 FALSE,則在轉譯期間可能會發生資料截斷。 如果 可以在輸出緩衝區中傳回的位元組數大於 cbValueOutMax (輸出緩衝區的長度),則會發生截斷。 驅動程式必須判斷截斷是否可接受。 如果未發生截斷, SQLDriverToDataSource 會因為另一個錯誤而傳回 FALSE。 在任一情況下,szErrorMsg 中 會傳回特定的錯誤訊息。
如需翻譯資料的詳細資訊,請參閱 翻譯 DLL 。
相關函數
如需下列資訊 | 請參閱 |
---|---|
轉譯從資料來源傳回的資料 | SQLDataSourceToDriver |
傳回連接屬性的設定 | SQLGetConnectAttr |
設定連接屬性 | SQLSetConnectAttr |