共用方式為


從 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)
    長度為零的字元或二進位字串 NA 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_bindvarlencbData 參數相同。 將 -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 (在第一個錯誤時失敗,) DB-Library 版本的 BCP_CONTROL 和 ODBC 版本中為 10。 DB-Library依賴預設值 0 終止大量複製作業的應用程式必須變更,才能呼叫 ODBC bcp_control ,將 BCPMAXERRS 設定為 0。

  • ODBC bcp_control 函式支援DB-Library版本的 bcp_control不支援下列選項:

    • BCPODBC

      當設定為 TRUE 時,指定以字元格式儲存的 datetimeSmalldatetime 值會有 ODBC 時間戳記逸出序列前置詞和尾碼。 這僅適用於 BCP_OUT 作業。

      將 BCPODBC 設定為 FALSE 時,轉換成字元字串的 日期時間 值會輸出為:

      1997-01-01 00:00:00.000  
      

      將 BCPODBC 設定為 TRUE 時,相同的 日期時間 值會輸出為:

      {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 衝突。 請改用 SQLCHARACTER 進行 bcp_colfmt

  • 在 ODBC 版本的大量複製函式中,在字元字串中使用 datetimeSmalldatetime 值的格式是 yyyy-mm-dd hh:mm:ss.sss 的 ODBC 格式; Smalldatetime 值使用 yyyy-mm-dd hh:mm:ss 的 ODBC 格式。

    大量複製函式DB-Library版本會使用數種格式,接受字元字串中的 datetimeSmalldatetime 值:

    • 預設格式為 mmm dd yyyy hh:mmxx, 其中 xx 是 AM 或 PM。

    • DB-Library dbconvert函式支援的任何格式的datetimeSmalldatetime字元字串。

    • 在 [SQL Server 用戶端網路公用程式] 的 [DB-Library選項] 索引標籤上核取[使用國際設定] 方塊時,DB-Library大量複製函式也會接受用戶端電腦登錄地區設定所定義的地區日期格式的日期。

    DB-Library大量複製函式不接受 ODBC datetimeSmalldatetime 格式。

    如果 SQL_SOPT_SS_REGIONALIZE 陳述式屬性設定為 SQL_RE_ON,ODBC 大量複製函數會接受採用針對用戶端電腦登錄地區設定所定義之地區日期格式的日期。

  • 以字元格式輸出 money 值時,ODBC 大量複製函式會提供四位數的有效位數,且沒有逗號分隔符號;DB-Library版本只提供兩位數的有效位數,並包含逗號分隔符號。

另請參閱

執行大量複製作業 (ODBC)
大量複製函數