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サポートされていません。ODBC 一括コピー関数によって発生したエラーとメッセージを取得するには、SQLGetDiagRec を呼び出す必要があります。 ODBC バージョンの一括コピー関数は、標準的な一括コピーのリターン コードである SUCCEED または FAILED を返しますが、SQL_SUCCESS や SQL_ERROR など、ODBC 形式のリターン コードを返しません。
DB-Library bcp_bindvarlen パラメーターに指定された値は、ODBC bcp_bindcbData パラメーターとは異なる方法で解釈されます。
指定された条件 varlen 値をDB-Libraryする ODBC cbData 値 NULL 値が指定された場合 0 -1 (SQL_NULL_DATA) 可変長のデータが指定された場合 -1 -10 (SQL_VARLEN_DATA) 長さが 0 の文字列またはバイナリ文字列の場合 NA 0 DB-Library では、 varlen 値 -1 は可変長データが指定されていることを示します。ODBC cbData では NULL 値のみが指定されていることを意味すると解釈されます。 -1 DB-Library varlen の仕様をSQL_VARLEN_DATAに変更し、 varlen の仕様を 0 から SQL_NULL_DATA に変更します。
DB-Library bcp_colfmt file_collenと ODBC bcp_colfmtcbUserData には、前述の varlen パラメーターと cbData パラメーター bcp_bind同じ問題があります。 -1 の DB-Library file_collen 仕様をSQL_VARLEN_DATAに変更し、 file_collen の仕様を 0 から SQL_NULL_DATA に変更します。
ODBC bcp_control 関数の iValue パラメーターは void ポインターです。 DB-Library では、 iValue は整数でした。 ODBC iValue の値を void * にキャストします。
bcp_control オプション BCPMAXERRS は、一括コピー操作が失敗するまでにエラーが発生する可能性がある個々の行の数を指定します。 BCPMAXERRS の既定値は、bcp_controlのDB-Library バージョンでは 0 ( 最初のエラー では失敗)、ODBC バージョンでは 10 です。 既定の 0 に依存して一括コピー操作を終了するアプリケーションDB-Library、ODBC bcp_control を呼び出して BCPMAXERRS を 0 に設定するように変更する必要があります。
ODBC bcp_control 関数は 、 DB-Library バージョンのbcp_controlでサポートされていない次のオプション をサポートしています。
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 に設定した場合、一括コピー関数で、ID 制約を含む列に対して指定したデータ値が挿入されることを示します。 このオプションを設定しないと、挿入される行に対して新しい ID 値が生成されます。
BCPHINTS
一括コピーのさまざまな最適化を指定します。 このオプションは、6.5 以前のバージョンのSQL Serverでは使用できません。
BCPFILECP
一括コピー ファイルのコード ページを指定します。
BCPUNICODEFILE
キャラクター モードの一括コピー ファイルが Unicode ファイルであることを指定します。
ODBC bcp_colfmt 関数は、ODBC SQLCHAR typedef と競合するため、SQLCHAR の file_type インジケーターをサポートしていません。 bcp_colfmtには、代わりに SQLCHARACTER を使用してください。
ODBC バージョンの一括コピー関数では、文字列内の datetime 値と smalldatetime 値を操作するための形式は、yyyy-mm-dd hh:mm:ss.sss の ODBC 形式です。 smalldatetime 値は、yyyy-mm-dd hh:mm:ss の ODBC 形式を使用します。
一括コピー関数の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 の一括コピー関数では 4 桁の有効桁数が指定され、コンマ区切り記号は指定されません。DB-Libraryバージョンでは、2 桁の有効桁数のみを指定し、コンマ区切り記号を含めます。