建立程式變數與 SQL Server 數據行之間的系結。
語法
HRESULT BCPColFmt(
DBORDINALidxUserDataCol,
inteUserDataType,
intcbIndicator,
intcbUserData,
BYTE *pbUserDataTerm,
intcbUserDataTerm,
DBORDINALidxServerCol);
備註
BCPColFmt 方法可用來建立 BCP 數據檔欄位與 SQL Server 數據行之間的系結。 它會採用數據行的長度、類型、終止符和前置長度做為參數,並設定個別欄位的每個屬性。
如果使用者選擇互動式模式,則會呼叫此方法兩次;一次,根據預設值來設定數據行格式(根據伺服器數據行的類型),並一次根據在互動式模式期間選擇之用戶端選擇的數據行類型來設定格式。
在非互動式模式中,每個數據行只會呼叫一次,將每個數據行的類型設定為字元或原生類型,以及設定數據行和數據列終止符。
BCPColFmt 方法可讓您指定大量複製的使用者檔案格式。 針對大量複製,格式包含下列部分:
從使用者檔案欄位到資料庫數據行的對應。
每個使用者檔案欄位的數據類型。
每個欄位的選擇性指標長度。
每個使用者檔案欄位的數據長度上限。
每個欄位的選擇性終止位元組序列。
選擇性終止位元組序列的長度。
每個對 BCPColFmt 的呼叫都會指定一個使用者檔案欄位格式。 例如,若要變更五個字段用戶數據檔中三個字段的預設設定,請先呼叫 BCPColumns(5)
,然後呼叫 BCPColFmt 五次,其中三個呼叫會設定自定義格式。 針對其餘兩個呼叫,將 eUserDataType 設定為 BCP_TYPE_DEFAULT,並將 cbIndicator、cbUserData 和 cbUserDataTerm 分別設定為 0、BCP_VARIABLE_LENGTH和 0。 此程式會複製所有五個數據行,三個具有您的自定義格式,以及兩個具有預設格式。
備註
在呼叫 BCPColFmt 之前,必須先呼叫 IBCPSession::BCPColumns 方法。 您必須針對使用者檔案中的每個數據行呼叫 BCPColFmt 一次。 針對任何使用者檔案數據行多次呼叫 BCPColFmt 會導致錯誤。
您不需要將使用者檔案中的所有資料複製到 SQL Server 資料表。 若要略過數據行,請指定數據行的數據格式,將idxServerCol 參數設定為0。 若要略過欄位,您仍然需要方法的所有資訊才能正確運作。
注意IBCPSession::BCPWriteFmt 函式可用來保存透過 BCPColFmt 提供的格式規格。
論點
idxUserDataCol[in]
用戶數據檔中欄位的索引。
eUserDataType[in]
用戶數據檔中欄位的數據類型。 可用的數據類型會列在 SQL Server Native Client 頭檔 (sqlncli.h) 中,例如BCP_TYPE_XXX格式BCP_TYPE_SQLINT4。 如果指定了BCP_TYPE_DEFAULT值,提供者會嘗試使用與數據表或檢視數據行類型相同的類型。 當自變數BCP_TYPE_SQLDECIMAL或BCP_TYPE_SQLNUMERIC時 eUserDataType
,從 SQL Server 大量複製到檔案中:
如果源數據行不是十進位或數值,則會使用預設有效位數和小數字數。
如果源數據行是十進位或數值,則會使用源數據行的有效位數和小數字數。
cbIndicator[in]
欄位的前置詞長度。 預設值為 BCP_PREFIX_DEFAULT。 前置詞的有效長度為 0、1、2、4 和 8。 前置詞大小 8 最常用來指出字段已區塊化。 這可用來有效率地大量複製大型實值類型數據行。
cbUserData[in]
使用者檔案中此欄位數據的最大長度,以位元組為單位,不包括任何長度指標或終止符的長度。
將 設定 cbUserData
為 BCP_LENGTH_NULL表示數據檔欄位中的所有值皆為 ,或應設定為 NULL。 設定 cbUserData
為 BCP_LENGTH_VARIABLE表示系統應該判斷每個欄位的數據長度。 對於某些欄位,這可能表示在從 SQL Server 複製的數據之前產生長度/Null 指標,或指標在複製到 SQL Server 的數據中預期。
針對 SQL Server 字元和二進位數據類型, cbUserData
可以是BCP_LENGTH_VARIABLE、BCP_LENGTH_NULL、0 或某些正值。 如果 cbUserData
為 BCP_LENGTH_VARIABLE,則系統會使用長度指標、如果有,或是終止符序列來判斷數據的長度。 如果同時提供長度指標和終止符序列,大量複製會使用會導致複製的數據量最少的複本。 如果 cbUserData
為 BCP_LENGTH_VARIABLE,則數據類型為 SQL Server 字元或二進位類型,如果未指定長度指標或終止符序列,系統就會傳回錯誤訊息。
如果 cbUserData
為 0 或正值,則系統會使用 cbUserData
作為數據長度上限。 不過,如果除了正 cbUserData
數之外,也會提供長度指標或終止符序列,系統會使用會導致複製最少數據量的方法來判斷數據長度。
值 cbUserData
表示數據的位元組計數。 如果字元數據是以 Unicode 寬字元表示,則正 cbUserData
參數值代表每個字元的大小乘以位元組為單位的字元數。
pbUserDataTerm[size_is][in]
要用於欄位的終止符序列。 此參數主要適用於字元數據類型,因為所有其他類型都是固定長度,或者,如果是二進位數據,則需要長度指標,才能準確地記錄存在的位元元數目。
若要避免終止擷取的數據,或表示使用者檔案中的數據未終止,請將此參數設定為 NULL。
如果使用多個指定使用者檔案數據行長度的方法(例如終止符和長度指標,或終止符和最大數據行長度),大量複製會選擇產生最少複製數據量的數據。
大量複製 API 會視需要執行 Unicode 到 MBCS 的字元轉換。 請務必小心,以確保已正確設定終止符位元組位元串和位元組位元串的長度。
cbUserDataTerm[in]
要用於數據行之終止符序列的長度,以位元組為單位。 如果數據中沒有終止符或需要終止符,請將此值設定為 0。
idxServerCol[in]
數據行在資料庫數據表中的序數位置。 第一個數據行編號是 1。 數據行的序數位置是由 IColumnsInfo::GetColumnInfo 或類似方法所報告。 如果此值為 0,大量複製會忽略資料檔中的欄位。
傳回碼值
S_OK
方法成功。
E_FAIL
發生提供者特定錯誤,如需詳細資訊,請使用 ISQLServerErrorInfo 介面。
E_UNEXPECTED
此方法的呼叫是非預期的。 例如,在呼叫此方法之前,未呼叫 IBCPSession::BCPInit 方法。
E_INVALIDARG錯誤(無效參數)
自變數無效。
E_OUTOFMEMORY 記憶體不足
記憶體不足錯誤。