從 DB-Library 轉換成 ODBC 大量複製
將 DB-Library 大量複製程式轉換成 ODBC 很簡單,因為 SQL Server Native Client ODBC 驅動程式所支援的大量複製函數與 DB-Library 大量複製函數很相似,但有下列例外狀況:
DB-Library 應用程式會將指向 DBPROCESS 結構的指標當做大量複製函數的第一個參數傳遞。在 ODBC 應用程式中,DBPROCESS 指標會由 ODBC 連接控制代碼所取代。
DB-Library 應用程式會在連接之前呼叫 BCP_SETL,以便啟用 DBPROCESS 的大量複製作業。ODBC 應用程式則改在連接之前呼叫 SQLSetConnectAttr,以便啟用連接控制代碼的大量作業:
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER);
SQL Server Native Client ODBC 驅動程式不支援 DB-Library 訊息和錯誤處理常式。您必須呼叫 SQLGetDiagRec 來取得由 ODBC 大量複製函數所引發的錯誤和訊息。大量複製函數的 ODBC 版本會傳回標準的大量複製傳回碼 SUCCEED 或 FAILED,而非 ODBC 樣式的傳回碼,例如 SQL_SUCCESS 或 SQL_ERROR。
針對 DB-Library bcp_bindvarlen 參數所指定之值的解譯方式與 ODBC bcp_bindcbData 參數有所不同。
指示的條件
DB-Library varlen 值
ODBC cbData 值
提供了 Null 值
0
-1 (SQL_NULL_DATA)
提供了變數資料
-1
-10 (SQL_VARLEN_DATA)
長度為零的字元或二進位字串
無
0
在 DB-Library 中,varlen 值為 -1 是表示提供了可變長度的資料,而在 ODBC cbData 中,則解譯成表示只提供了 NULL 值。請將任何 -1 的 DB-Library varlen 規格變更為 SQL_VARLEN_DATA,並且將任何 0 的 varlen 規格變更為 SQL_NULL_DATA。
DB-Library bcp_colfmtfile_collen 和 ODBC bcp_colfmtcbUserData 與上述 bcp_bindvarlen 和 cbData 參數具有相同的問題。請將任何 -1 的 DB-Library file_collen 規格變更為 SQL_VARLEN_DATA,並且將任何 0 的 file_collen 規格變更為 SQL_NULL_DATA。
ODBC bcp_control 函數的 iValue 參數是 void 指標。在 DB-Library 中,iValue 是整數。請將 ODBC iValue 的值轉換成 void *。
bcp_control 選項 BCPMAXERRS 會指定大量複製作業失敗之前,有多少個別的資料列可以具有錯誤。BCPMAXERRS 的預設值為 0 (在發生第一個錯誤時失敗) (在 bcp_control 的 DB-Library 版本中) 和 10 (在 ODBC 版本中)。相依於預設值 0 來結束大量複製作業的 DB-Library 應用程式必須變更為呼叫 ODBC bcp_control,以便將 BCPMAXERRS 設定為 0。
ODBC bcp_control 函數支援下列選項 (bcp_control 的 DB-Library 版本不支援):
BCPODBC
當設定為 TRUE 時,這個選項會指定以字元格式所儲存的 datetime 和 smalldatetime 値具有 ODBC 時間戳記逸出序列前置詞和後置詞。這僅適用於 BCP_OUT 作業。
當 BCPODBC 設定為 FALSE 時,轉換成字元字串的 datetime 值會輸出為:
1997-01-01 00:00:00.000
當 BCPODBC 設定為 TRUE 時,相同的 datetime 值會輸出為:
{ts '1997-01-01 00:00:00.000' }
BCPKEEPIDENTITY
當設定為 TRUE 時,這個選項會指定大量複製函數插入提供給含有識別條件約束之資料行的資料值。如果沒有設定,就會為插入的資料列產生新的識別值。
BCPHINTS
指定各種大量複製最佳化。這個選項無法在 6.5 或舊版 SQL Server 上使用。
BCPFILECP
指定大量複製檔案的字碼頁。
BCPUNICODEFILE
指定字元模式大量複製檔案為 Unicode 檔案。
ODBC bcp_colfmt 函數不支援 SQLCHAR 的 file_type 指標,因為它會與 ODBC SQLCHAR typedef 衝突。請針對 bcp_colfmt 改用 SQLCHARACTER。
在大量複製函數的 ODBC 版本中,在字元字串中使用 datetime 和 smalldatetime 值的格式是 ODBC 格式 yyyy-mm-dd hh:mm:ss.sss。smalldatetime 值會使用 ODBC 格式 yyyy-mm-dd hh:mm:ss。
大量複製函數的 DB-Library 版本會使用許多格式來接受字元字串中的 datetime 和 smalldatetime 值:
預設格式為 mmm dd yyyy hh:mmxx,其中 xx 是 AM 或 PM。
採用 DB-Library dbconvert 函數所支援之任何格式的 datetime 和 smalldatetime 字元字串。
在 SQL Server 用戶端網路公用程式的 DB-Library [選項] 索引標籤上核取了 [使用國際設定] 方塊時,DB-Library 大量複製函數也會接受採用針對用戶端電腦登錄地區設定所定義之地區日期格式的日期。
DB-Library 大量複製函數不接受 ODBC datetime 和 smalldatetime 格式。
如果 SQL_SOPT_SS_REGIONALIZE 陳述式屬性設定為 SQL_RE_ON,ODBC 大量複製函數會接受採用針對用戶端電腦登錄地區設定所定義之地區日期格式的日期。
以字元格式輸出 money 值時,ODBC 大量複製函數會提供四位數的有效位數而且不含任何逗號分隔符號。DB-Library 版本僅提供兩位數的有效位數而且包含逗號分隔符號。